如何阻止我的 bash 终端将先前命令的部分内容添加到当前行的前面?

如何阻止我的 bash 终端将先前命令的部分内容添加到当前行的前面?

我在使用带有 bash 的 Ubuntu (10.04),遇到了一个奇怪的问题。当我使用向上箭头滚动查看命令历史记录并返回到较长的命令之一(即具有足够字符以在屏幕上换行的命令)后,继续向前或向后滚动,该长命令的前 8 或 9 个字符会显示在输入行中。

这些字符不会对我最终输入的任何命令产生任何影响,但有时很难弄清楚我想要输入什么。

它首先看起来像这样:

  name@machine:~$ 

然后就变成这样了:

  name@machine:~$ scp -i /h

滚动回到我的某个长scp命令后。如果我输入一个命令,如下所示:

  name@machine:~$ scp -i /hls -l

它执行以下命令:ls -l

编辑以在我的 ~/.bashrc 中添加 PS1 的值

  PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\033[31;40m\]$(__git_ps1 "[%s]")\[\033[00m\]\$ '

再次编辑以添加值echo $PS1

  \[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\033[31;40m\]$(__git_ps1 "[%s]")\[\033[00m\]\$

答案1

如果你错过了\[(之后的那个\w),试试这个:

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[31;40m\]$(__git_ps1 "[%s]")\[\033[00m\]\$ '

答案2

变量的值PS1包含一些非打印字符,例如用于设置颜色的序列。它们需要被包装起来\[\]因此当 Bash 计算显示内容的位置以及在您执行诸如滚动浏览上一个命令之类的操作时移动它们时,它们不会被计算在内。如果您显示,PS1我可以更具体一些。

答案3

当这个情况发生时:

  • 确保您的终端窗口足够宽。
  • 键入命令:reset
  • 按下 Control+L。

相关内容