我想让我的 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
到
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
这有效并且终端看起来正如我想要的那样。
但是过了一段时间,当我使用向上箭头键获取命令历史记录并输入几个命令时,事情变得奇怪了。
从一条干净的行开始,然后按向上箭头键即可。再次按下该键时,行上的文本将限制在约 15 个字符,而历史记录中的新命令(应该显示)在开头将限制为几个字符,并且它们在命令行上合并在一起。
例如我最近执行的两个命令是
Java Test4 words-250.txt words-250-in.txt
Javac Test4.java
按一次向上箭头键时,会显示第一行,这是理所当然的。按第二次时,会显示以下内容:
Java Test4 worc Test4.java
尽管输出结果很奇怪,但终端工作正常。例如,如果我在执行上述操作后按 Enter 键,Javac Test4.java 将运行。如果我尝试使用退格键删除整行,我只能删除到以下行:
Java Test4
如果随后按下回车键,我会得到一个新的空行,就像按下回车键时该行是空的一样。
如果我重置.bashrc 文件,所有这些都会消失。
为什么会发生这种情况?我该如何解决?
答案1
您需要将转义序列括在\[...\]
,告诉 bash 在确定提示符宽度时不要计算它们。否则,bash 会认为提示符比实际显示的长度要长(因为转义序列不占用任何可见空间)。
因此,调整另一个提示:
PS1='\[\033[1;32m\][\W]\$ \[\033[00m\]'
上面的 PS1 和下面的 PS1 效果都一样好:
PS1='\[\e[1;32m\][\W]\$ \[\e[m\]'