欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Shell 管道的退出状态

程序员文章站 2022-07-10 08:20:28
...

管道命令的退出状态是由最后一条命令的退出状态。

如果通过 set 命令设置了 pipefail 选项,那么只要有一条命令退出状态非0,那么管道的退出状态就是这个命令的退出状态,否则退出状态为0.

ls hello | echo "hello"
echo "\$? = $?"

如果文件 hello 不存在,那么退出状态为0。

set -o pipefail
ls hello | echo "hello"
echo "\$? = $?"

如果文件 hello 不存在,退出状态为 ls hello 命令的退出状态值(非0)。

不过需要状态,如果开启了 pipefail 选项,那么会影响全局,如果不再需要这个选项的功能,记得关闭它,如下

# 开启
set -o pipefail
ls hello | echo "hello"
echo "\$? = $?"
# 关闭
set +o pipefail

参考

https://www.gnu.org/software/bash/manual/bash.html#Pipelines