是否可以使标准输出和标准输出在XTerm或Konsole中具有不同的颜色?

甚至可以实现吗?

我希望命令的stderr的输出以与stdout不同的颜色呈现(例如,红色)

我需要这样的修改才能在Linux上的Konsole、XTerm或GNOME终端模拟器中使用Bash shell

这里有一个结合了一些已经提出的好想法的解决方案

在bash脚本中创建函数:

color()(设置-o pipefail;$2>>>>>>1>>3>sed$s,.*,\e[31m&\e[m,>>2)3>>1

像这样使用它:

$color命令-程序-参数

它将以红色显示命令的stderr

请继续阅读,了解其工作原理。此命令演示了一些有趣的功能

  • color()…-创建名为color的bash函数
  • set-o pipefail-这是一个shell选项,用于保留命令的错误返回码,该命令的输出通过管道传输到另一个命令。这是在子shell中完成的,子shell由括号创建,以避免更改外壳中的pipefail选项
  • [email protected]-将函数的参数作为新命令执行。[email protected]相当于“$1”和“$2”…
  • 2>&1-将命令的stderr重定向到stdout,使其成为sedstdin
  • >&3-缩写为1>&3,这会将stdout重定向到新的临时文件描述符33稍后会被路由回stdout
  • sed…-由于上面的重定向,sedstdin是执行命令的stderr。它的功能是用彩色代码围绕每一行
  • $“…”使其理解反斜杠转义字符的bash构造
  • *-匹配整行
  • \e[31m-导致以下字符变为红色的ANSI转义序列
  • &-扩展到整个匹配字符串(本例中为整行)的sed替换字符
  • \e[m-重置颜色的ANSI转义序列
  • >&2-缩写为1>&2,这会将sedstdout重定向到stderr
  • 3>&1-将临时文件描述符3重定向回stdout

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

函数stdred()(
set-o管道故障;
(
&$2>1>3|
sed美元,.*,\e[31m&\e[m',>&2
)3>&1|
sed$,*,\e[32m&\e[m,'
)

发表评论