【问题标题】:coloured bash prompt which uses a function使用函数的彩色 bash 提示符
【发布时间】:2019-11-27 20:01:24
【问题描述】:

我需要制作一个使用另一个函数返回的数据的 bash 提示符。我需要提示来支持颜色。

玩具箱:

fx() {
...some processing...
# x is the result of some processing
color=x
echo "\[$(tput setaf ${color})\]${data_from_processing}\[${tput sgr0}\]"
}
PS1='fx'

但上述解决方案似乎不起作用。我期望的是指定颜色的“数据”。但我得到的是\[\]<the correct data>\[\]。需要注意的是\]<the correct data\[是彩色的。

【问题讨论】:

    标签: linux bash shell command-prompt prompt


    【解决方案1】:

    在评估命令替换之前,shell 会解析 PS1 的值(包括识别特殊的转义序列 \[\])。

    最简单的解决方法是将\[\] 替换为shell 会使用的实际字节数:

    q() { printf '\001%s\002123\001%s\002' "$(tput setaf 1)" "$(tput sgr0)"; }
    

    但是,我建议使用PROMPT_COMMAND 来组装PS1 的值,而不是嵌入命令替换:

    q () { echo "\[$(tput setaf 1)\]123\[$(tput sgr0)\]"; }
    
    make_prompt () {
      PS1="$(q):"
    }
    PROMPT_COMMAND=make_prompt
    

    当然,如果喜欢的话,你可以直接把q的定义折叠成make_prompt的定义。请注意,我们不会延迟对q 的调用;它被立即调用以创建 PS1 的值以用于每个提示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-20
      • 2023-03-19
      • 2015-09-28
      • 2011-09-29
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      • 2017-09-04
      相关资源
      最近更新 更多