LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1068|回复: 9

可以設定一個$PWD變數成為一個$pwd變數嗎?

[复制链接]
发表于 2010-3-10 16:52:04 | 显示全部楼层 |阅读模式
也就是$pwd的值要等於$PWD,隨著$PWD的值改變而隨時改變,有點類似於變數的另一個名子。

如果,設定成
pwd="$PWD",這個樣子是不行的,系統只會取當時那一個$PWD的固定值,不會隨著改變。

請高手指點一下,謝謝!!!
发表于 2010-3-10 17:07:53 | 显示全部楼层
不知道你要做什么用

仅供参考~
  1. >echo $pwd
  2. >export pwd=PWD
  3. >echo $pwd
  4. PWD
  5. >eval echo \${$pwd}
  6. /home/moerae
  7. >
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-10 17:53:45 | 显示全部楼层
我是想把~/.profile寫如下:

stacks=$DIRSTACK
export stacks

然後在字符操作使用它,不過它只會取得當時那個值而已,也就是設定的那一霎那值就計算好了,
被當成一個字串,所以2樓的辦法也是不行。

像系統變數PS1就可以,使用\$(指令)這種語法,我要的就是這種功能。
回复 支持 反对

使用道具 举报

发表于 2010-3-10 21:54:25 | 显示全部楼层

  1. [iloadmin@ilo.sys ~]$ A=10
  2. [iloadmin@ilo.sys ~]$ B=A
  3. [iloadmin@ilo.sys ~]$ echo ${!B}
  4. 10
复制代码
回复 支持 反对

使用道具 举报

发表于 2010-3-11 14:29:12 | 显示全部楼层
Post by kid.xiyang;2074540

  1. [iloadmin@ilo.sys ~]$ A=10
  2. [iloadmin@ilo.sys ~]$ B=A
  3. [iloadmin@ilo.sys ~]$ echo ${!B}
  4. 10
复制代码


这种用法还是第一次见到,标记~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-11 15:50:04 | 显示全部楼层
Post by kid.xiyang;2074540
  1. [iloadmin@ilo.sys ~]$ A=10
  2. [iloadmin@ilo.sys ~]$ B=A
  3. [iloadmin@ilo.sys ~]$ echo ${!B}
  4. 10
复制代码

樓上沒懂我的意思。
4樓這個也是不行的,不是我要的功能,要得是PS1="\$(一個指令)"的語法。
我很好奇,系統變數 ``$PWD`` ``$OLDPWD`` ``$PS1`` ``$PS2`` ......這一類會跟隨著使用者操作而改變,那是用什麼方法做出來的。

ps:只要功能做出來就好了,能讓系統讀到這個變數就好。
回复 支持 反对

使用道具 举报

发表于 2010-3-11 21:21:33 | 显示全部楼层
可能是我理解错了,也可能是你想错了。我认为系统的``$PWD`` ``$OLDPWD`` ``$PS1`` ``$PS2``都只是普通变量而已,没有任何神奇的地方,``$PWD`` ``$OLDPWD`` 改变是因为他们被改变了。
``$PS1`` ``$PS2``不会变,只是显示格式的说明而已。每次需要的时候系统会按格式显示。

应该不会存在全自动的东西,但什么都会有办法解决。你如果说清楚你想达到的目的大家也许能帮你。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-12 01:30:24 | 显示全部楼层
因為在終端底下,常常打一大串的指令,有時候,有帶一串目錄,所以我想可不可以設定一些常用的目錄
成為變數,系統一開機就載入執行。

所以,我可以
cd $my_directory,快速的進入到任何一個目錄。
我也可以,直接跟上目錄
cp $my_directory/*.jpg $HOME

現在問題來了,如果是 "${DIRSTACK[1]}" (這個是系統目錄的堆疊)這樣打起來太長了,
所以我就想有沒有一個辦法,可以直接指定 "$st1" 等於上面那一個變數。

Linux系統裡面,有沒有一種東西,可以每0.000000000001秒執行一次的,也就是說
我只要把export st1="${DIRSTACK[1]}"這個指令,讓系統每0.0000000000001秒執行一次。
這樣我就可以隨時重$st1讀到${DIRSTACK[1]}的值了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-12 01:32:49 | 显示全部楼层
Post by lastart;2074756
可能是我理解错了,也可能是你想错了。我认为系统的``$PWD`` ``$OLDPWD`` ``$PS1`` ``$PS2``都只是普通变量而已,没有任何神奇的地方,``$PWD`` ``$OLDPWD`` 改变是因为他们被改变了。
``$PS1`` ``$PS2``不会变,只是显示格式的说明而已。每次需要的时候系统会按格式显示。

应该不会存在全自动的东西,但什么都会有办法解决。你如果说清楚你想达到的目的大家也许能帮你。


你說的很對,是我理解錯了,改變的原因是因為它們被改變了。
回复 支持 反对

使用道具 举报

发表于 2010-3-12 21:25:34 | 显示全部楼层
虽然我不知道你说的情况跟预先定义好几个变量相比有什么好处,
我还是找到一个可能可以满足你要求的方法。
PROMPT_COMMAND
  1. ~$ PROMPT_COMMAND='for i in {1..3};do eval declare a$i=$RANDOM;done'
  2. ~$  echo $a1
  3. 27862
  4. ~$  echo $a1
  5. 21828
复制代码
你的要求应该相当于:
  1. PROMPT_COMMAND='for i in {0..20};do eval declare st$i="${DIRSTACK[$i]}";done'
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表