本 HOWTO 中讨论的 Bash 提示符的许多更改都使用了非打印字符。更改提示符文本的颜色、更改 Xterm 标题栏以及移动光标位置都需要非打印字符。
如果我想要一个非常简单的提示符,它由一个大于号和一个空格组成
[giles@nikola giles]$ PS1='> ' > |
这只是一个两个字符的提示符。如果我修改它,使其成为一个亮黄色的的大于号(颜色将在它们自己的章节中讨论)
> PS1='\033[1;33m>\033[0m ' > |
这工作正常 - 直到您输入一个很长的命令行。因为提示符仍然只由两个打印字符组成(一个大于号和一个空格),但 shell 认为这个提示符有十一个字符长(我认为它将 '\033'、'[1' 和 '[0' 各算作一个字符)。您可以通过输入一个非常长的命令行来看到这一点 - 您会发现 shell 在文本到达终端边缘之前就换行了,并且在大多数情况下换行效果很差。这是因为它对提示符的实际长度感到困惑。
所以改用这个
> PS1='\[\033[1;33m\]>\[\033[0m\] ' |
这更复杂,但它有效。命令行可以正确换行。所做的是将启动黄色的 '\033[1;33m' 括在 '\[' 和 '\]' 中,这告诉 shell “这些转义方括号之间的所有内容,包括方括号本身,都是非打印字符。” 对结束颜色的 '\033[0m' 也做了同样的处理。