在bash脚本中获取外部PS1值

时间:2011-02-07 10:16:43

标签: bash environment-variables

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

我知道在使用dot之前运行脚本会使bash将env变量传递给脚本,但是我需要获取PS1而不管它是如何被调用的,因为我不相信谁会运行脚本

我如何得到它?

更新: 变量已导出/etc/profile,但我无法得到它:

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

我没有输出上一个命令。

3 个答案:

答案 0 :(得分:7)

使用'bash -i'启动测试脚本;这使得它的行为类似于登录shell,并且(除其他外)设置PS1。

如果您的脚本将作为可执行文件(.e.g ./test.sh)运行,那么您也可以在初始行上提供-i,如下所示:

#!/bin/bash -i

更新:仅当您的脚本直接执行时才有效,例如

$ ./test.sh

为:

$ bash test.sh

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

$ bash -i test.sh

答案 1 :(得分:2)

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

对不起,这没有答案,但就是这样......

答案 2 :(得分:1)

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

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

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

我不知道这是否有任何其他奇怪的行为,但它可以满足我的需要。