# Red STDERR
# rse <command string>
function rse()
{
# We need to wrap each phrase of the command in quotes to preserve arguments that contain whitespace
# Execute the command, swap STDOUT and STDERR, colour STDOUT, swap back
((eval $(for phrase in "$@"; do echo -n "'$phrase' "; done)) 3>&1 1>&2 2>&3 | sed -e "s/^\(.*\)$/$(echo -en \\033)[31;1m\1$(echo -en \\033)[0m/") 3>&1 1>&2 2>&3
}
方法一:直接使用进程替换:
方法 2:在 bash 或 zsh 中创建一个函数:
像这样使用它:
两种方法都会
stderr
以红色显示命令。继续阅读以了解其工作原理。这些命令展示了一些有趣的特性。前 3 个要点仅适用于方法 2。其余的适用于两种方法。
color()...
— 创建一个名为 color 的 bash 函数。set -o pipefail
— 这是一个 shell 选项,它保留一个命令的错误返回码,该命令的输出通过管道传输到另一个命令中。这是在由括号创建的子shell中完成的,以免更改外壳中的 pipefail 选项。"$@"
— 将函数的参数作为新命令执行。"$@"
相当于"$1" "$2" ...
2> >(...)
— 该>(...)
语法称为进程替换。前面是2>
,它将stderr
主命令的 连接到括号内stdin
的进程的 。sed
sed ...
— 由于上面的重定向,sed
'sstdin
是stderr
执行命令的。它的功能是用颜色代码包围每一行。$'...'
一个 bash 构造,使其能够理解反斜杠转义字符.*
— 匹配整行。\e[31m
— 导致以下字符变为红色的 ANSI 转义序列&
—sed
扩展为整个匹配字符串(本例中为整行)的替换字符。\e[m
— 重置颜色的 ANSI 转义序列。>&2
— 的简写1>&2
,这会将sed
'重定向stdout
到stderr
。您还可以查看标准错误:https ://github.com/sickill/stderred
使stderr永久变红的 bash 方法是使用 'exec' 来重定向流。将以下内容添加到您的 bashrc:
我之前已经发布过:如何为 STDOUT 和 STDERR 设置字体颜色
http://sourceforge.net/projects/hilite/
我制作了一个包装脚本,以纯 bash 实现 Balázs Pozsár 的答案。将其保存在您的 $PATH 和前缀命令中以对其输出进行着色。
您可以使用这样的功能
我附加 >&2 以打印到 stderr
我有一个稍微修改过的 O_o Tync 脚本版本。我需要为 OS X Lion 制作这些模组,但它并不完美,因为脚本有时会在包装命令之前完成。我已经添加了睡眠,但我确信有更好的方法。
这个解决方案对我有用:https ://superuser.com/questions/28869/immediately-tell-which-output-was-sent-to-stderr
我已将此功能放在我的
.bashrc
or中.zshrc
:然后例如:
会给我一个红色的输出。
使用 xargs 和 printf: