【问题标题】:Getting external PS1 value inside bash script在 bash 脚本中获取外部 PS1 值
【发布时间】:2011-02-07 10:16:43
【问题描述】:

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

我知道在运行之前带点的脚本会使 bash 将环境变量传递给脚本,但无论如何调用它,我都需要获取 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 environment-variables


    【解决方案1】:

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

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

    #!/bin/bash -i
    

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

    $ ./test.sh
    

    为:

    $ bash test.sh
    

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

    $ bash -i test.sh
    

    【讨论】:

    • 谢谢,但它不起作用。我使用建议的 shebang 标头和简单的 echo Prompt: $PS1 创建了一个测试脚本,但我得到了输出 Prompt:
    • 我得到了 $PS1 的输出。
    • Andrea:你是用bash test.sh 运行脚本吗?查看更新。
    • 请注意,这实际上并没有获取PS1 的“当前”值,它正在运行 .bashrc 文件以生成新值。这实际上可能是您想要的,但有区别。
    【解决方案2】:

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

    如果你愿意,你可以在标题中使用 -i 标志,它似乎在脚本期间保持环境,而无需以特殊方式运行它。即

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

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

    【讨论】:

    • 3 年后再次,请注意,这实际上并没有获得 PS1 的“当前”值,它正在运行 .bashrc 文件以生成新值。这实际上可能是您想要的,但有区别
    【解决方案3】:

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

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

    【讨论】:

    • 您好,您的回答可以提供参考吗?
    • 找到了我在 man bash 中搜索的内容,INVOCATION 部分。你说的对。谢谢!
    • @Andrea Spadaccini:抱歉,上周末我有一些没有网络访问的真实生活:)但你似乎找到了你的信息,对吧?
    猜你喜欢
    • 2013-10-10
    • 2023-03-23
    • 2011-02-05
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 2016-12-04
    • 2013-02-23
    • 1970-01-01
    相关资源
    最近更新 更多