我想通过不同的颜色轻松区分我的命令和 shell 的其余输出。但我在自定义 bash shell 方面没有太多经验,所以我不知道如何在输入后重置颜色。
我当前的 PS1 变量如下所示:
export PS1="$red\u$green\$(__git_ps1) $turk\w
$white$ "
# '\$(__git_ps1)' git status prompt (generates a space before it even if empty)
所以我的输入是白色的。但即使命令的输出也是白色的,因为它没有重置。此外,如果命令本身对其输出进行颜色编码,那么它本身会重置颜色,从而导致白色和灰色的一些难看的混合。
那么如何在输入命令后重置颜色呢?
答案1
该DEBUG
陷阱在每个命令之前运行,因此如果您对命令行输入进行了着色,则可以滥用它来重置颜色。 (“滥用”,因为这不是调试。)
有了这个:
$ promptcol="$(tput sgr0)$(tput setaf 3)"
$ cmdcol="$(tput sgr0)$(tput bold)"
$ normalcol="$(tput sgr0)"
$ trap 'echo -n "$normalcol"' DEBUG
$ PS1="\[$promptcol\]\w\$ \[$cmdcol\]"
我明白了:
请注意,您需要\[...\]
周围的颜色代码,以便 shell 知道如何正确计算提示的宽度。还,请注意,您不能将 放在\[...\]
变量中,shell 首先处理提示转义,然后才处理变量扩展。
答案2
在~/.bash_logout
插入以下内容:
echo -e "\033[0m"
/usr/bin/clear