甚至可以实现吗?
我希望命令的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,使其成为sed的stdin>;&;3-缩写为1>;&;3,这会将stdout重定向到新的临时文件描述符33稍后会被路由回stdoutsed…-由于上面的重定向,sed的stdin是执行命令的stderr。它的功能是用彩色代码围绕每一行$“…”使其理解反斜杠转义字符的bash构造*-匹配整行\e[31m-导致以下字符变为红色的ANSI转义序列&;-扩展到整个匹配字符串(本例中为整行)的sed替换字符\e[m-重置颜色的ANSI转义序列>;&;2-缩写为1>;&;2,这会将sed的stdout重定向到stderr3>;&;1-将临时文件描述符3重定向回stdout
这是同样概念的一个扩展,它也使STDOUT变为绿色:
函数stdred()(
set-o管道故障;
(
&$2>;1>;3|
sed美元,.*,\e[31m&;\e[m',>;&;2
)3>;&;1|
sed$,*,\e[32m&;\e[m,'
)