Unix:延迟的标准错误显示

有没有办法在应用程序完成后显示错误摘要(从stderr )?

例如rsync与“–progress”显示大量的数据,包括错误。 但是当它结束时 – 它只是说“有错误”。 在这种情况下,我想显示写入stderr的所有内容,所以我不必滚动和search究竟出了什么问题:)

PS我知道在C中编写这样的实用程序是多么简单,但我想可以有更多方便的东西,我不知道:)

一个包装脚本来处理这个:

 #!/bin/sh TMPFILE=$(mktemp) "$@" 2>$TMPFILE if [ "$?" != "0" ]; then cat $TMPFILE fi 

如果你把它保存到/usr/local/bin/delaystderrchmod +x /usr/local/bin/delaystderr ,你应该可以像delaystderr rsync --progress一样运行。 如果进程退出而没有信号错误(返回非零),stderr将不会被打印; 如果你喜欢,你可以删除iffi开头的行。

我不确定你会怎样比这更容易。

(注:我没有真正testing过这个脚本,所以买家要小心,所有这一切)

与womble的答案类似,您可以编写一个bash脚本,如下所示:

 #!/bin/sh set -e TMPFILE=$(mktemp) exec 2>$TMPFILE trap 'cat "$TMPFILE"; rm -f "$TMPFILE" exit $?' INT TERM EXIT command1 command2 command3 

这应该保存所有发送到stderr的所有脚本并在最后输出。 和womble的回答一样,我还没有testing过这个。

如果您使用bash将stderrredirect到stdout,则可以将其redirect到一个文件:

 rsync  - 进程2>&1
 rsync  - 进程2>&1> file.out