Bash 如何将输出重定向到文件和标准输出,并在出现错误时退出
我可以在出现这样的错误时退出程序Bash 如何将输出重定向到文件和标准输出,并在出现错误时退出,bash,shell,pipe,stdout,Bash,Shell,Pipe,Stdout,我可以在出现这样的错误时退出程序 ls /fake/folder || exit 1 我可以将输出重定向到一个文件,而不是像这样 ls /usr/bin | tee foo.txt 但我做不到 ls /fake/folder | tee foo.txt || exit 1 因为我得到的是tee的输出,而不是ls 如何将输出重定向到文件和标准输出以及出错退出这正是pipefail运行时选项的作用: # Make a pipeline successful only if **all** co
ls /fake/folder || exit 1
我可以将输出重定向到一个文件,而不是像这样
ls /usr/bin | tee foo.txt
但我做不到
ls /fake/folder | tee foo.txt || exit 1
因为我得到的是tee
的输出,而不是ls
如何将输出重定向到文件和标准输出以及出错退出这正是
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扩展,那么将其放在流程替代而不是管道中将防止tee
影响退出状态:
ls /fake/folder > >(tee foo.txt) || exit 1