如何检测管道开头的错误?
How to detect an error at the beginning of a pipeline?
在我的脚本中,我需要处理管道的 non-last 命令的退出状态:
do_real_work 2>&1 | tee real_work.log
令我惊讶的是,$?
包含 tee
的退出代码。的确,下面的命令:
false 2>&1 | tee /dev/null ; echo $?
输出 0。惊喜,因为 csh(几乎)等同于
false |& tee /dev/null ; echo $status
打印 1。
如何获取最近管道的非最后命令的退出代码?
Bash 有 set -o pipefail
,它使用第一个非零退出代码(如果有)作为管道的退出代码。
POSIX shell 没有这样的功能 AFAIK。您可以使用不同的方法解决此问题:
tail -F -n0 real_work.log &
do_real_work > real_work.log 2>&1
kill $!
即在运行命令之前开始跟踪还不存在的文件,在运行命令之后kill进程。
在我的脚本中,我需要处理管道的 non-last 命令的退出状态:
do_real_work 2>&1 | tee real_work.log
令我惊讶的是,$?
包含 tee
的退出代码。的确,下面的命令:
false 2>&1 | tee /dev/null ; echo $?
输出 0。惊喜,因为 csh(几乎)等同于
false |& tee /dev/null ; echo $status
打印 1。
如何获取最近管道的非最后命令的退出代码?
Bash 有 set -o pipefail
,它使用第一个非零退出代码(如果有)作为管道的退出代码。
POSIX shell 没有这样的功能 AFAIK。您可以使用不同的方法解决此问题:
tail -F -n0 real_work.log &
do_real_work > real_work.log 2>&1
kill $!
即在运行命令之前开始跟踪还不存在的文件,在运行命令之后kill进程。