如何停止 bash shell PS1 颜色以在命令末尾停止?

如何停止 bash shell PS1 颜色以在命令末尾停止?

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

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

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

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

另一个例子:

  • 我输入命令“cat”,颜色是蓝色
  • 输出来了,整个输出都是蓝色的

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

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

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

我在 OSX 上。

编辑#1

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

                 1号

答案1

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

例如:

trap '[[ -t 1 ]] && tput sgr0' DEBUG

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

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

相关内容