它甚至可以实现吗?
我们需要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浪者箱子
Vagrant Shell Provisioning运行但失败
Windows中的Vagrant ssh:ssh_exchange_identification
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 。
这是一个同样的概念,也使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。
#! /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] 举报,一经查实,本站将立刻删除。