【发布时间】:2014-09-10 10:24:50
【问题描述】:
我正在使用一个外部命令来填充我的 bash 提示符,该提示符在每次评估 PS1 时运行。但是,当此命令输出不可打印的字符(如颜色转义码)时,我遇到了问题。 这是一个例子:
$ cat green_cheese.sh
#!/bin/bash
echo -e "\033[32mcheese\033[0m"
$ export PS1="\$(./green_cheese.sh) \$"
cheese $ # <- cheese is green!
cheese $ <now type really long command>
在 PS1 提示符中处理非打印字符的规范方法是将它们包含在 \[ 和 \] 转义序列中。问题是,如果您从外部命令执行此操作,则 PS1 解释器不会解析这些转义:
$ cat green_cheese.sh
#!/bin/bash
echo -e "\[\033[32m\]cheese\[\033[0m\]"
$ export PS1="\$(./green_cheese.sh) \$"
\[\]cheese\[\] $ # <- FAIL!
我可以从外部命令中使用特定的转义序列来获得所需的结果吗?或者有没有办法手动告诉提示设置提示宽度的字符数?
假设我可以从外部命令打印任何我喜欢的东西,并且这个命令可以非常智能(例如,计算输出中的字符)。我还可以根据需要使export PS1=... 命令变得复杂。 但是,颜色的转义码必须来自外部命令。
提前致谢!
【问题讨论】:
标签: linux bash escaping command-prompt prompt