我需要在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
我没有输出上一个命令。
答案 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"
我不知道这是否有任何其他奇怪的行为,但它可以满足我的需要。