开发者社区> 问答> 正文

使用功能的彩色bash提示

我需要制作一个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[是颜色。

展开
收起
祖安文状元 2020-01-16 17:41:53 461 0
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
    
    

    当然,您可以将if 的定义q直接折叠为make_prompt。请注意,我们不会延迟拨打电话q;立即调用它以创建PS1用于每个提示的值。

    2020-01-16 17:42:05
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载