我需要制作一个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[是颜色。
在评估命令替换之前,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
当然,您可以将if 的定义q直接折叠为make_prompt。请注意,我们不会延迟拨打电话q;立即调用它以创建PS1用于每个提示的值。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。