在 bash shell 中执行命令后重置输出的颜色

在 bash shell 中执行命令后重置输出的颜色

我想通过不同的颜色轻松区分我的命令和 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

相关内容