我有一个自定义的 PS1 颜色,其中实际的 shell 命令以不同的颜色显示,这样我就可以快速查看我输入的命令并将其与命令输出本身分开。
假设 PS1 中命令提示符的颜色设置为“蓝色”,而我的 shell 中的默认颜色是白色。
- 我输入一个命令,例如 ls,(ls -l 为蓝色)
- 它生成的输出,第一行仍然是蓝色
- 所有剩余的线都是白色的
我想要的是命令后的所有输出都是“白色”。
另一个例子:
- 我输入命令“cat”,颜色是蓝色
- 输出来了,整个输出都是蓝色的
我希望输出为“白色”,同时保持我输入的命令提示符为“蓝色”
在某些命令上,这很好,在其他命令上,相同的颜色溢出到输出的第一行,然后默认颜色开始,而在其他一些命令上,整个输出(例如 cat)具有相同的颜色。
有没有办法只将我输入的命令保留为一种颜色,其余的保留为默认颜色?
我在 OSX 上。
编辑#1
这是 @derobert 在评论中链接到的屏幕截图,显示了我正在寻找的内容。
答案1
您基本上想在 bash 执行命令之前重置终端颜色。这可以通过trap
.
例如:
trap '[[ -t 1 ]] && tput sgr0' DEBUG
BashDEBUG
在命令之前立即执行陷阱,因此这将导致tput sgr0
(重置格式属性)在每个命令之前运行。
这[[ -t 1 ]]
是一项安全检查,以确保 STDOUT 实际上是一个终端。在某些情况下,bash 的 STDOUT 可能未连接到终端(管道、远程 ssh 等),因此您不想tput
发送终端转义码。