如何以红色打印标准错误


14

如何将红色的标准错误打印到控制台中,而不使用与标准输出相同的颜色?

可以使用Gnome Terminal吗?


链接可能会对您有所帮助
devav2 2012年

您可以使用hilite实用程序为一个命令启用此行为。您必须手动hilite在shell命令前添加才能使用它,但是如果您知道或怀疑命令输出了错误并想找到它们,它仍然很有用。
罗里·奥肯

Answers:


8

我使用stderred并发现它是一个很好的解决方案。如其自述文件所述

Stderred钩在write()和libc的一系列流函数(fwrite,fprintf,错误...)上,以着色所有发送到终端的stderr输出,从而使其与stdout区别开来。基本上,它将带​​有描述符“ 2”的文本包装到文件中,并带有适当的ANSI转义码,使文本变为红色。

它被实现为共享库,并且由于动态链接程序的预加载/插入功能,不需要重新编译现有的二进制文件。

在Linux(带有LD_PRELOAD),FreeBSD(也是LD_PRELOAD)和OSX(带有DYLD_INSERT_LIBRARIES)上受支持。

它很容易编译,但是您确实需要按照其Github网站上的说明从源代码进行构建:

sudo apt-get install build-essential git cmake 

然后

git clone git://github.com/sickill/stderred.git
cd stderred

然后

make

其中最重要的部分是向您的行添加适当的行.bashrc;您必须链接到libstderred.so构建目录中的文件;您必须使用构建目录所在的绝对路径(/ home / mike / src / stderred / build)。我将以下内容添加到我的.bashrc

export LD_PRELOAD="/home/mike/src/stderred/build/libstderred.so${LD_PRELOAD:+:$LD_PRELOAD}"

显然,当您不想再使用它时,请从您的行中删除上述行,.bashrc然后重新启动终端。

结果在不存在的文件上进行了测试(使用时显然不起作用sudo,因为在.bashrc设置了不同的环境时将不会读取用户的文件):

(顺便说一下,它不会使我的duke @ nukem提示符变成红色,因为那已经是红色

在此处输入图片说明


不敢相信我走了这么多年,不知道这存在!它非常有用,到现在,它应该已经成为操作系统的一部分了大约一百年。:)
罗杰·达尔

6

通常,是的,因为Gnome Terminal是ANSI终端,并且支持标准ANSI转义码。

这是一个例子。在您的终端中输入以下内容:

echo -e "\e[01;31mREDRUM\e[0m"

-e选项允许解释反斜杠代码,从而\e成为“ Esc”(十六进制代码0x1B)。或者,要直接输入转义,请按ctrl-V Esc

echo  "^[[01;31mREDRUM^[[0m"

逃脱和 [两者共同构成了终端识别的代码。在该序列之后,您需要插入以冒号(;)分隔的属性列表,并以终止m。有关所有代码,请参见此处。示例包括属性0(重置所有属性,正如您可能在上面注意到的那样,这是终止我的示例的顺序)和一堆样式(带下划线,明亮,粗体等)以及一些颜色属性。

上面的答案告诉您在编写自己的程序时如何使用颜色。

但是,如果我正确理解了您的问题,则希望对正在运行的任何程序的stderr和stdout进行可视化分隔。如果不通过过滤器解析它们的输出,这将不容易。这是一个例子(发现此处)如何进行:

  1. 定义一个函数(您可以将其放在.bashrc文件中):

    color() { "$@" 2>&1>&3|sed 's,.*,\x1B[31m&\x1B[0m,'>&2; } 3>&1
    
  2. 启动这样的程序:

    color program
    

程序中的stderr将变为红色。


无论如何,要使它从任何程序的任何错误消息中着色?
路加福音
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.