【问题标题】: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 的值以用于每个提示。