微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

STDOUT和STDERR可以在XTerm / Konsole下使用不同的颜色吗?

它甚至可以实现吗?

我们需要STDERR (即其他stream,然后STDOUT )有不同的colo(u)r。 例如红色。

我们使用bash ,terminal应该是Konsole (XTerm,gnometerminal或任何可用的)。

谢谢,如果你知道:-)

服务器cpu和GPU与LAMP

VLC将stream保存到文件

在Windows-> EC2-> Windows上运行Vagrant Headless

Python子stream程Popen:在Windows上将二进制数据发送到C ++

将uint16_t转换为char 以通过套接字(unix)发送

我可以使用OleDbConnection Excel ACE驱动程序从不可查找的System.IO.Stream而不是文件读取Excel文件吗?

存放一切从stream浪者箱子

Laravel宅基地vhostconfiguration

Vagrant Shell Provisioning运行但失败

Windows中的Vagrant ssh:ssh_exchange_identification

这是一个解决方案,结合了一些已经提出的好点子。

在bash脚本中创建一个函数

color()(set -o pipefail;"$@" 2>&1>&3|sed $'s,.*,e[31m&e[m,'>&2)3>&1

像这样使用它:

$ color command -program -args

它会以红色显示命令的stderr 。

继续阅读,了解它是如何工作的。 这个命令演示了一些有趣的功能

color()... – 创建一个名为color的bash函数

set -o pipefail – 这是一个shell选项,用于保留输出到另一个命令中的命令的错误返回码。 这是在由括号创建的子shell中完成的,以便不更改外壳中的pipefail选项。

"$@" – 执行作为新命令的参数。 "$@"相当于"$1" "$2" ...

2>&1 – 将命令的stderr重定向到stdout以便它成为sed的stdin 。

>&3 – 1>&3 >&3简写,这将stdout重定向一个新的临时文件描述符3 。 3后来被路由回stdout 。

sed ... – 由于上面的重定向, sed的stdin是被执行的命令的stderr 。 它的功能是用颜色代码包围每一行。

$'...'一个bash构造,使它理解反斜线转义的字符

.* – 匹配整个行。

e[31m – 导致以下字符为红色的ANSI转义序列

& – 扩展为整个匹配字符串的sed替换字符(本例中为整行)。

e[m – 重置颜色的ANSI转义序列。

>&2 – 1>&2 >&2缩写,将sed的stdout重定向到stderr 。

3>&1 – 将临时文件描述符3重定向到stdout 。

这是一个同样的概念,也使STDOUT绿色的扩展:

function stdred() ( set -o pipefail; ("$@" 2>&1>&3 | sed $'s,' >&2) 3>&1 | sed $'s,e[32m&e[m,' )

你也可以检查stderred: https : //github.com/sickill/stderred

我看不出有什么办法让终端模拟器做到这一点。

终端仿真器和shell / app之间的接口是通过一个伪tty,其中终端仿真器在主端,而shell / app在另一端。 shell / app将stdout和stderr都连接到同一个pty,所以当终端仿真器从shell / app输出的pty中读取时,它不能告诉哪个被写入stdout和哪个stderr。

您将不得不使用应用程序和slave-pty之间截取数据的解决方案,并插入转义码来控制终端输出colo(u)r。

这里是一个小的Awk脚本,它将打印所有通过红色的内容

#! /usr/bin/awk -f {printf("%c[%dm%s%c[0mn",0x1B,31,$0,0x1B);fflush()}

它只需在必要的转义代码中打印它在stdin中收到的每一行,以红色显示。 紧接着是一个转义码来重置终端。

(如果你需要一个不同的颜色,改变31)

把它保存到colr.awk ,做一个chmod a+x ,并像这样使用它:

$ my_program | ./colr.awk

它的缺点是行可能不会按顺序显示,因为stderr直接进入控制台,而stdout首先经历一个额外的过程。

我想你应该使用stderr上的标准转义序列。 看看这个 。

希利特会做到这一点。 这是一个轻量级的解决方案,但是你必须为每个命令调用它,例如。 hilite gcc myprog.c 。 一个更激进的方法是内置到我的实验性shell Gush中 ,它显示所有命令以红色显示stderr,stdout以黑色显示。 无论哪种方式对于软件构建都非常有用,因为在这些软件构建中,如果没有突出显示,那么您可以轻松地错过一些错误消息,从而获得大量输出

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐