.bashrc 编辑弄乱了终端命令向上箭头历史打印

dar*_*urf 5 command-line bash gnome-terminal bashrc

我想在 Ubuntu 中给我的终端提示一个更个性化的外观,并想在编写命令时更改 '$' 之前的文本。

从我发现这是通过编辑主目录中的 .bashrc 文件来完成的,所以我进入那里并进行了更改

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
Run Code Online (Sandbox Code Playgroud)

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='\e[1;32m[\W]\$ \e[m'
fi
Run Code Online (Sandbox Code Playgroud)

这有效,终端看起来像我想要的那样。

但是一段时间后,当我使用向上箭头键进入命令历史时输入几个命令时,事情变得很奇怪。

从干净的线条开始并按向上箭头键是有效的。再次按下时,该行上的文本将被限制在大约 15 个字符,并且历史记录中的新命令(应该显示)在开始时被几个字符限制,并且它们合并在一起在命令行上。

例如我最近的两个命令是

Java Test4 words-250.txt words-250-in.txt
Javac Test4.java
Run Code Online (Sandbox Code Playgroud)

按一次向上箭头键时,将显示第一行。再次按下时,显示:

Java Test4 worc Test4.java
Run Code Online (Sandbox Code Playgroud)

尽管有这个奇怪的输出,终端工作正常。例如,如果我在执行上述操作后按 Enter,Javac Test4.java 将运行。如果我尝试使用退格键删除整行,我只能删除直到该行显示

Java Test4
Run Code Online (Sandbox Code Playgroud)

如果在此之后按回车,我会得到一个新的空行,就像按回车时该行是空的一样。

如果我重置 .bashrc 文件,所有这些都会消失。

为什么会发生这种情况,我该如何解决?

mur*_*uru 7

我不知道为什么(从来没有真正理解转义码),但调整其他提示似乎有效:

PS1='\[\033[1;32m\][\W]\$ \[\033[00m\]'
Run Code Online (Sandbox Code Playgroud)

显然,您需要将转义序列括在 中\[...\],以告诉 bash 在确定提示宽度时不要计算它们。因此,上面的 PS1 和下面的都可以很好地工作:

PS1='\[\e[1;32m\][\W]\$ \[\e[m\]'
Run Code Online (Sandbox Code Playgroud)