如果没有颜色,我的提示看起来是这样的:
[0] [dimo414@dimo414:/tmp]
$ echo $PS1 | sed 's/\x1b/\\e/g'
\n[0] [dimo414@dimo414:/tmp]\n\$
我添加了一些颜色并\[
...\]
划定界限:
[0] [dimo414@dimo414:/tmp]
$ echo $PS1 | sed 's/\x1b/\\e/g'
\n[\[\e[32m\]0\[\e[0m\]] [\[\e[34m\]dimo414\[\e[0m\]\[\e[32m\]@dimo414\[\e[0m\]:\[\e[94m\]/tmp\[\e[0m\]]\n\$
看起来很棒!但是Bash常见问题解答指出:
\[ \] 仅在您分配 PS1 时才特殊,如果您在提示显示时运行的函数内打印它们,则不起作用。在这种情况下,您需要使用字节 \001 和 \002
\001
但是,当我将提示改为使用时\002
,我得到了这个(StackExchange 似乎正确地将它们呈现为零宽度字符,但它们在那里):
[0] [dimo414@dimo414:/tmp]
$ echo $PS1 | sed 's/\x1b/\\e/g'
\n[\e[32m0\e[0m] [\e[34mdimo414\e[0m\e[32m@dimo414\e[0m:\e[94m/tmp\e[0m]\n\$
相同的提示 - 带有\001
... \002
- 在 OSX 上的 iTerm2 中看起来是正确的。
我正在使用这两个命令来转义颜色序列:
# Previously (works)
printf '\[%s\]' "$(color "$@")"
# Currently (doesn't work on Ubuntu)
printf '\001%s\002' "$(color "$@")"
为了在 Ubuntu 上使用\001
... ,我应该做什么而不是第二个选项?\002