使用功能的彩色bash提示

问题描述 投票:0回答:1

我需要发出一个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\[是彩色的。

enter image description here

linux bash shell command-prompt prompt
1个回答
0
投票

在评估命令替换之前,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值。

© www.soinside.com 2019 - 2024. All rights reserved.