kolypto Asked: 2009-07-25 18:01:36 +0800 CST2009-07-25 18:01:36 +0800 CST 2009-07-25 18:01:36 +0800 CST Unix:延迟标准错误显示 772 有没有办法stderr在应用程序完成后显示错误摘要(来自)? 例如rsync,使用“--progress”显示大量数据,包括错误。但是当它完成时 - 它只是说“有错误”。在这种情况下,我想显示写入 stderr 的所有内容,因此我不必滚动并搜索究竟出了什么问题:) PS 我知道在 C 中编写这样的实用程序是多么简单,但我想还有更多我不知道的方便的东西:) unix reporting stderr 3 个回答 Voted David Pashley 2009-07-25T20:08:24+08:002009-07-25T20:08:24+08:00 类似于 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 的回答一样,我没有对此进行测试。 Best Answer womble 2009-07-25T18:51:13+08:002009-07-25T18:51:13+08:00 处理此问题的包装脚本: #!/bin/sh TMPFILE=$(mktemp) "$@" 2>$TMPFILE if [ "$?" != "0" ]; then cat $TMPFILE fi 如果你把它保存到/usr/local/bin/delaystderrandchmod +x /usr/local/bin/delaystderr中,你应该能够以delaystderr rsync --progress. 如果进程退出时没有发出错误信号(返回非零),则不会打印 stderr;如果您愿意,您可以删除以开头的行if并fi禁用该行为。 我不知道你怎么会比这更容易。 (注意:我还没有实际测试过这个脚本,所以买家要小心) Gary Chambers 2009-07-25T18:03:55+08:002009-07-25T18:03:55+08:00 如果您使用 bash 将 stderr 重定向到 stdout,则可以选择将其重定向到文件: rsync --progress 2>&1 rsync --progress 2>&1 > file.out
类似于 womble 的答案,您可以编写一个 bash 脚本,例如:
这应该为整个脚本保存发送到 stderr 的所有内容并在最后输出。与 womble 的回答一样,我没有对此进行测试。
处理此问题的包装脚本:
如果你把它保存到
/usr/local/bin/delaystderr
andchmod +x /usr/local/bin/delaystderr
中,你应该能够以delaystderr rsync --progress
. 如果进程退出时没有发出错误信号(返回非零),则不会打印 stderr;如果您愿意,您可以删除以开头的行if
并fi
禁用该行为。我不知道你怎么会比这更容易。
(注意:我还没有实际测试过这个脚本,所以买家要小心)
如果您使用 bash 将 stderr 重定向到 stdout,则可以选择将其重定向到文件: