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


12

我有一个自定义的PS1颜色,其中实际的shell命令使用不同的颜色,只是为了快速查看输入的命令并将其与命令输出本身分开。

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

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

我想要的是命令后的所有输出均为“ white”。

另一个例子:

  • 我输入命令“ cat”,颜色为蓝色
  • 输出到来,整个输出为蓝色

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

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

有没有一种方法可以只将我键入的命令保留为一种颜色,其余的保留为默认颜色?

我在OSX上。

编辑#1

这是@derobert在评论中链接到的屏幕快照,该屏幕快照显示了我在寻找什么。

                 ss#1


2
您需要向我们显示您的提示,以便我们查明错误。
glenn jackman 2014年

Answers:


14

您基本上想在bash执行命令之前重设终端颜色。可以使用来完成trap

例如:

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

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

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


你把它放在哪里?假设PS1没有退色。现在,如何在用户输入命令并按Enter后立即添加此行以执行此命令?
polym 2014年

1
@polym在您的.bashrc(或任何$PS1设置的位置)中。我将其放在$PS1定义旁边,以便您知道它们之间的关系。
Patrick

好的,行得通。这有可能出错吗?
polym 2014年

@polym不再了
Patrick

很棒,这正是我需要重置终端颜色的方法。
iQ。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.