stderr
有没有办法在应用程序完成后显示错误摘要(来自)?
例如,rsync
使用“--progress”会显示大量数据,包括错误。但当它完成时 - 它只会显示“有错误”。在这种情况下,我想显示写入 stderr 的所有内容,这样我就不必滚动并搜索到底出了什么问题 :)
PS 我知道用 C 编写这样的实用程序是多么简单,但我想可能还有更多我不知道的方便的东西:)
答案1
处理此问题的包装脚本:
#!/bin/sh
TMPFILE=$(mktemp)
"$@" 2>$TMPFILE
if [ "$?" != "0" ]; then
cat $TMPFILE
fi
如果您将其保存到 和/usr/local/bin/delaystderr
,chmod +x /usr/local/bin/delaystderr
则应该能够以 身份运行delaystderr rsync --progress
。如果进程退出时没有发出错误信号(返回非零值),则不会打印 stderr;如果您愿意,可以删除以 和 开头的行以禁用该行为if
。fi
我不确定你还能得到比这更容易的事情。
(注意:我实际上还没有测试过这个脚本,所以买家要谨慎)
答案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