Shell 提示自定义和 cmd 行为

pka*_*mol 4 command-line prompt .profile bashrc ps1

我希望我的提示显示:

  1. 当前(绝对)工作目录,以绿色和

  2. 在新行中,美元符号和一个空白区域。

我正在使用这条线 .profile

export PS1='\e[0;32m$(pwd)\n\e[m$ '

所以当在 eg 时Desktop,我的提示看起来像这样:

然而,有时当点击向上箭头重新运行以前的命令时,在提示开始时会出现一个随机字符序列,除非我按下回车键,否则它似乎不会消失,例如

我从来没有打过cd cd Desktop命令。最奇怪的部分是退格键甚至不会删除cd上面两个命令中的第一个!

有什么建议?

Zan*_*nna 6

您必须确保提示中的非打印字符在转义的方括号中,否则 bash 无法正确计算提示的大小。我想我已经为你修好了:

PS1='\[\e[0;32m\]$PWD\n\[\e[m\]$ '
Run Code Online (Sandbox Code Playgroud)

  • 如果你使用 `$PWD` 而不是 `$(pwd)`,shell 不必设置管道,fork 两个新进程并为每个提示调用一个外部命令。:-) (3认同)
  • @DavidFoerster 哈哈谢谢!自从我弄乱了我的提示以来已经有一段时间了。正确的 PS1 方法是使用 `\w` 但它将 `/home/zanna` 更改为 `~` (2认同)