在bash脚本中获取外部PS1值

在bash脚本中获取外部PS1值,bash,environment-variables,Bash,Environment Variables,我需要在bash脚本中获取PS1变量的值 我知道在运行脚本之前加一个点会使bash将env变量传递给脚本,但是我需要获取PS1,不管它是如何调用的,因为我不相信谁会运行脚本 我怎么得到它 更新: 变量已在/etc/profile中导出,但我无法获取它: [ Test ] root@myhost:~# export | grep PS1 declare -x PS1="[ Test ] \\u@\\h:\\w\\\$ " [ Test ] root@myhost:~# cat test.sh e

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

我知道在运行脚本之前加一个点会使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 

最后一个命令没有输出。

这个变量在bash中以某种特殊的方式处理(但在AIX或HPUX
sh
中,我知道即使在非交互式的情况下也可以访问它)。它只在交互式shell中使用,所以不可能在非交互式调用中访问它的值


很抱歉,没有答案,但事实就是这样…

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

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

#!/bin/bash -i
$ bash -i test.sh
更新:这仅在直接执行脚本时有效,例如

$ ./test.sh
为:

$ bash test.sh
这将再次在非交互式shell中运行它。如果要从命令行使用bash,请执行以下操作:

#!/bin/bash -i
$ bash -i test.sh

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

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

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

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

嗨,你能为你的答案提供一个参考吗?在man bash的“调用”部分找到了我要搜索的内容。你是对的。谢谢@安德里亚·斯帕达奇尼:对不起,上周末我有一些无法上网的现实生活:)但你似乎找到了你的信息,对吗?谢谢,但它不起作用。我用建议的shebang头和一个简单的
回显提示符创建了一个测试脚本:$PS1
,但是我得到了输出
提示符:
。我从中得到了$PS1输出。安德里亚:你是用
bash test.sh
运行脚本的吗?请参阅更新。请注意,这并不是实际获取PS1的“当前”值,而是运行.bashrc文件来生成新值。这可能实际上是您想要的,但有一个区别。3年后,请再次注意,这并不是实际获取
PS1
的“当前”值,而是运行.bashrc文件来生成新值。这可能就是你想要的,但有区别