如何在命令结束时停止 bash shell PS1 颜色?

iQ.*_*iQ. 12 bash prompt

我有一个自定义的 PS1 颜色,其中我有不同颜色的实际 shell 命令,这样我就可以快速查看我键入的命令并将其与命令输出本身分开。

假设 PS1 中的颜色在命令提示符下设置为“蓝色”,而我的 shell 中的默认颜色是白色。

  • 我输入一个命令,例如 ls,(ls -l 是蓝色的)
  • 它生成的输出,第一行仍然是蓝色的
  • 所有剩余的线都是白色的

我想要的是命令后的所有输出都是“白色”。

另一个例子:

  • 我输入一个命令'cat',颜色是蓝色
  • 输出来了,整个输出是蓝色的

我希望输出为“白色”,同时保持我输入的“蓝色”命令提示符

在某些命令上,它很好,其他命令,相同的颜色溢出到输出的第一行,然后默认颜色开始和其他一些命令,整个输出(例如 cat)具有相同的颜色。

有没有办法只保留我以一种颜色输入的命令,而将其余命令保留为默认值?

我在 OSX 上。

编辑#1

这是@derobert 在评论中链接到的屏幕截图,显示了我正在寻找的内容。

                 SS#1

phe*_*mer 14

您基本上想在 bash 执行命令之前重置终端颜色。这可以通过一个trap.

例如:

trap '[[ -t 1 ]] && tput sgr0' DEBUG
Run Code Online (Sandbox Code Playgroud)

BashDEBUG在命令之前立即执行陷阱,因此这将导致tput sgr0(重置格式属性)在每个命令之前运行。

[[ -t 1 ]]是一项安全检查,以确保 STDOUT 实际上是一个终端。在某些情况下,bash 的 STDOUT 未连接到终端(管道、远程 ssh 等),因此您不想tput发送终端转义码。