立即告诉哪个输出被发送到 stderr

Cli*_*ore 8 bash colors stderr

在自动化任务时,首先手动测试它是明智的。但是,如果进入 stderr 的任何数据都可以立即识别,并且可以与进入 stdout 的数据区分开来,并且将所有输出放在一起,那么事件序列是什么,这将是有帮助的。

如果在程序退出时打印其返回代码,那么最后的接触会很好。

所有这些都有助于自动化。是的,我可以在程序完成时回显返回码,是的,我可以重定向 stdout 和 stderr;我真正喜欢的是一些外壳、脚本或易于使用的重定向器,它们以黑色显示标准输出,以红色显示与标准输出交错的标准错误,并在最后打印退出代码。

有这样的野兽吗?[如果重要的话,我在 Mac OS X 上使用 Bash 3.2]。


更新:对不起,我已经有几个月没有看过这个了。我想出了一个简单的测试脚本:

#!/usr/bin/env python
import sys

print "this is stdout"
print >> sys.stderr, "this is stderr"
print "this is stdout again"
Run Code Online (Sandbox Code Playgroud)

在我的测试中(可能是由于缓冲方式),rse 和 hilite 显示来自 stdout 的所有内容,然后显示来自 stderr 的所有内容。fifo 方法获得了正确的顺序,但似乎对 stderr 行后面的所有内容进行了着色。ind 抱怨我的 stdin 和 stderr 行,然后将 stderr 的输出放在最后。

这些解决方案中的大多数都是可行的,因为只有最后一个输出进入 stderr 并不是不典型的,但是,如果有一些稍微好一点的东西会很好。

jtb*_*des 9

我刚刚设计了一个涉及 FIFO 的疯狂方法。

$ mkfifo foo
$ grep --color . foo &
$ your_command 2>foo
Run Code Online (Sandbox Code Playgroud)

如果您希望将 stderr 输出分开,您可以打开两个单独的 shell 并grep --color . foo在一个不带 的情况下运行“ ” &,然后在另一个中运行命令(仍然使用2>foo)。您将在grep其中获得 stderr并在主要获得 stdout 。

这是有效的,因为 stderr 输出通过 FIFO 路由到grep --color,其默认颜色为红色(至少对我来说是这样)。完成后,只需rmFIFO ( rm foo)。

警告:我真的不确定这将如何处理输出顺序,您必须对其进行测试。


小智 7

是的,这是可能的。查看此站点上的“使 STDERR 变为红色”部分,以获取一个工作示例。

基本代码是这样的

# 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
}
Run Code Online (Sandbox Code Playgroud)

函数本身给出了简要说明。所做的是移动 STDOUT 和 STDERR,因此sed将 STDERR 放入 1,将其着色,然后将其交换回来。将文件流 3 视为此处的临时变量。

调用非常简单

rse commands
Run Code Online (Sandbox Code Playgroud)

但是,某些调用不会按预期工作;注意事项都在链接页面上提供。

顺便说一句,我认为也可以提供以下形式的解决方案

commands | rse 
Run Code Online (Sandbox Code Playgroud)

其中 rse 将为输出着色。

我还发现这个hilite项目似乎可以做到这一点。我没有试过,但它可能是你正在寻找的。

hilite 是一个微型实用程序,它执行您指定的命令,突出显示打印到 stderr 的任何内容。它主要设计用于构建,使警告和错误像陈词滥调一样突出。

其他相关项目:


sic*_*ill 3

您还可以查看 stderred: https: //github.com/sickill/stderred