这个问题是对该问题的答案的后续,关于更改 XFCE 终端中用户输入提示的颜色:Ubuntu 终端(Xfce):使输入命令的字体颜色与输出文本不同
由于我不允许在那里发表评论(声望至少 50 点),所以我不得不提出一个新问题。
根据答案,我使用了以下命令:
PS1='\e[1;36m\u@\h \W]\$\e[0m '
这会使格式保持与默认格式相同,但会将颜色更改为青色,正如预期的那样。
但是,我遇到了一些非常奇怪的行为。有时光标会跳回到输入行,有时它会显示不应该存在的旧文本。有时它会分成两行,这样我就继续在上面一行输入。例如:
说一下我想做的事:
$ cd /some/path/to/a/directory
但当我输入它时它变成了这样:
$ cd /some/pa/directoryath/to
如果我输入回车键,它仍然会正确读取命令,只是显示错误。当这种情况发生时,如果我尝试使用退格键,它会变成这样的:
$ cd /some/pa/directoryath/to
$ cd /some/pa/directo
$ cd /some/pa -------- at this point I cannot erase anything else,
in the display some of the characters are still
lingering, but if I type enter there is nothing on the input line
另一个例子,假设我显示以下内容:
$ ls
folder1 folder2 folder3 folder4
现在我想输入一些其他命令,那么可能会发生以下情况:
$ ls
folder1 folder2 folder3 folrectory
$ cd /some/path/to/a/di
再一次,如果我输入回车键,输入会被正确识别,但显示就会混乱。
当我键入向上箭头以获取上一个命令时,或者当输入行接近窗口的右边缘时,最常出现此问题,但并非唯一出现。
答案1
您需要将终端转义序列括起来,并且只能将其括在\[
和之间\]
。
请参阅bash
手册页中的“PROMPTING”部分。
代替
PS1='\e[1;36m\u@\h \W]\$\e[0m '
你应该写
PS1='\[\e[1;36m\]\u@\h \W]\$\[\e[0m\] '
答案2
我测试并发现您的提示也存在问题,它似乎过早地预期了右边距并导致换行。
请尝试一下我使用的这个
if [ "$USER" = root ]; then
PS1='\[\033[01;31m\]$(statstring)\[\033[00m\]${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\] \[\033[01;34m\]\w\[\033[00m\] \$ '
else
PS1='\[\033[01;31m\]$(statstring)\[\033[00m\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\] \[\033[01;34m\]\w\[\033[00m\] \$ '
fi
如果可以的话,你可以把它放入你的 ~/.bashrc 中,至少用于交互式 shell。我使用
case "$TERM" in
xterm-color)
....
来决定何时使用它,并且您可以检查与您的设置相匹配的东西。
statstring
编辑:在设置提示之前添加一个要创建的函数~/.bashrc
function statstring {
RC=$?
if [ "0" != $RC ]; then
printf "[$RC] "
fi
}