Unix:延迟 stderr 显示

Unix:延迟 stderr 显示

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

例如,rsync使用“--progress”会显示大量数据,包括错误。但当它完成时 - 它只会显示“有错误”。在这种情况下,我想显示写入 stderr 的所有内容,这样我就不必滚动并搜索到底出了什么问题 :)

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

答案1

处理此问题的包装脚本:

#!/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

我不确定你还能得到比这更容易的事情。

(注意:我实际上还没有测试过这个脚本,所以买家要谨慎)

答案2

与 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 的回答一样,我还没有测试过这一点。

答案3

如果您使用 bash 将 stderr 重定向到 stdout,那么可以选择将其重定向到文件:

rsync --progress 2>&1
rsync --progress 2>&1 > 文件.out

相关内容