我可以像错误一样退出程序
ls /fake/folder || exit 1
我可以将输出重定向到文件和STDOUT,如此
ls /usr/bin | tee foo.txt
但我无法做到
ls /fake/folder | tee foo.txt || exit 1
因为我获得了tee
而不是ls
如何将输出重定向到文件和STDOUT 和错误退出
答案 0 :(得分:6)
完全 pipefail
运行时选项的含义:
# Make a pipeline successful only if **all** components are successful
set -o pipefail
ls /fake/folder | tee foo.txt || exit 1
顺便提一下,如果你想明确优先顺序,请考虑:
set -o pipefail
{ ls /fake/folder | tee foo.txt; } || exit 1 # same thing, but maybe more clear
...或者,如果您想避免进行运行时配置更改,可以使用PIPESTATUS
检查最新管道的任何单个元素的退出状态:
ls /fake/folder | tee foo.txt
(( ${PIPESTATUS[0]} == 0 )) || exit
如果您不想采取上述任何方法,但 愿意使用bash采用的ksh扩展,则将其置于进程替换而不是管道将阻止{ {1}}影响退出状态:
tee