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

Loc*_*000 3 bash

我想通过不同的颜色轻松地将我的命令与 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)
Run Code Online (Sandbox Code Playgroud)

所以我的输入是白色的。但即使命令的输出也是白色的,因为它没有被重置。此外,如果命令本身对其输出进行颜色编码,那么它本身会重置颜色,从而导致白色和灰色的一些难看的混合。

那么如何在输入命令后重置颜色?

ilk*_*chu 5

DEBUG陷阱每个命令之前运行,所以你可以滥用它重置的颜色,如果你有彩色的命令行输入。(“滥用”,因为这不是调试。)

有了这个:

$ promptcol="$(tput sgr0)$(tput setaf 3)"
$ cmdcol="$(tput sgr0)$(tput bold)"
$ normalcol="$(tput sgr0)"
$ trap 'echo -n "$normalcol"' DEBUG
$ PS1="\[$promptcol\]\w\$ \[$cmdcol\]"
Run Code Online (Sandbox Code Playgroud)

我明白了:

彩色提示

请注意,您需要\[...\]周围的颜色代码,以便 shell 知道如何正确计算提示的宽度。另外,请注意,您不能将 放入\[...\]variables 中,shell 首先处理提示转义,然后才处理变量扩展。