2011-02-07 49 views
1

我需要在bash脚本中获取PS1变量的值。在bash脚本中获取外部PS1值

我知道使用点前运行脚本会使bash将env变量传递给脚本,但无论如何调用,我都需要获得PS1,因为我不相信谁会运行脚本。

我该如何得到它?

更新: 变量已出口在/etc/profile,但我不能得到它:

[ Test ] [email protected]:~# export | grep PS1 
declare -x PS1="[ Test ] \\[email protected]\\h:\\w\\\$ " 
[ Test ] [email protected]:~# cat test.sh 
echo $PS1 
[ Test ] [email protected]:~# bash test.sh 

我没有得到任何从最后一个命令的输出。

回答

1

此变量以某种方式在bash中以特殊方式处理(但例如在AIX或HPUX sh中,我知道即使在非交互式时也可以访问它)。它仅在交互式shell中使用,因此不可能在非交互式调用中访问其值。

对不起,这是没有答案,但是这是怎么回事...

+0

嗨,你能为你的答案提供一个参考吗? – 2011-02-11 15:31:09

+0

找到我正在搜索的男人bash,部分调查。你是对的。谢谢! – 2011-02-11 15:41:53

5

与“庆典-i”开始你的测试脚本;这使其表现得像一个登录外壳和(除其他外)设置PS1。

如果你的脚本将作为一个可执行文件运行(.eg ./test.sh),那么你也可以提供-i的初始行,像这样:

#!/bin/bash -i 

更新:这只如果你的脚本是直接执行的,例如

$ ./test.sh 

为:

$ bash test.sh 

为再次运行它在一个非交互的shell。如果你想从命令行使用bash,那就这样做:

$ bash -i test.sh 
1

5年后....因为我在找到这个问题后使用了下面的解决方案。

如果你想要,你可以在头文件中使用-i标志,它似乎在脚本期间保持环境,而不必以特殊方式运行它。即

#!/bin/bash -i 
echo "$PS1" 

我不知道这是否有其他奇怪的行为,但它为我所需要的。