Edd*_*ied 5 bash command-line colors prompt
在我的系统上,当使用彩色提示时,如果输出的最后一个字符不是换行符,则上一个命令输出的最后一行将被覆盖。
例如:使用默认的非彩色 bash 提示符,我们有:
[myusername@myhostname 目录名]$ echo -n foo-bar foo-bar[myusername@myhostname 目录名]$
这是预期的。
但是,使用以下彩色提示:
PS1='\[\033[1;32m\]\u@\h\[\033[0m\]:\[\033[1;34m\]\w\[\033[0m\]\$ '
我们有(此处显示没有颜色):
myusername@myhostname:~/path/to/dirname$ echo -n foo-bar myusername@myhostname:~/path/to/dirname$ rname$
光标现在位于行中的最后一个“r”。在提示符下键入一些字符会覆盖最后一个“rname$”。最终结果是,如果前一个命令的输出没有以换行符结尾,我就看不到它是什么。这是最重要的事情要解决。额外字符出现的方式,但过度写入,并不会打扰我,但也很好修复。
我已经尝试过使用来自 bash 文档的其他彩色提示,以及来自其他超级用户关于彩色提示的答案的一些彩色提示,它们的行为方式完全相同。
$ bash --version GNU bash,版本 3.1.17(1)-release (x86_64-redhat-linux-gnu) 版权所有 (C) 2005 Free Software Foundation, Inc.
不确定,但我认为是CentOS,不知道是什么版本。给我一个命令来检查操作系统,我会运行它。
小智 5
我的首选解决方案是让提示始终以换行符开头。这样我在最后一个命令输出之间总是有一个空行(当然,在这种情况下除外),这对我来说感觉更自然。最糟糕的情况是,我没有像您看到的那样覆盖文本,而是在两者之间没有空行。除非您尝试了一段时间并且根本无法忍受空行,否则我强烈推荐它。
PS1='\n\[\033[1;32m\]\u@\h\[\033[0m\]:\[\033[1;34m\]\w\[\033[0m\]\$ '
Run Code Online (Sandbox Code Playgroud)
一个额外的建议,如果你愿意的话:我还使用多行提示使我的命令行尽可能长,然后再换行(或者滚动,如果你的终端或 shell 是为此配置的)。我也想知道历史行号。两人在一起:
PS1='\n\[\033[1;32m\]\u@\h\[\033[0m\]:\[\033[1;34m\]\w\[\033[0m \!\]\n\$ '
Run Code Online (Sandbox Code Playgroud)
最后,我还喜欢在运行命令之前和之后打印时间戳。我使用的简化版本是:
export PROMPT_COMMAND="date +\"%Y-%m-%d %H:%M:%S (%s)\"; trap 'date +\"%Y-%m-%d %H:%M:%S (%s)\"; trap DEBUG' DEBUG"
Run Code Online (Sandbox Code Playgroud)
头晕了吗?:)