Bash 管道的退出状态在脚本中不同

Bash 管道的退出状态在脚本中不同

以下 bash 管道返回 1:

$ false | true
$ echo $?
1

然而,在脚本中执行时它返回 0:

$ cat test.sh
#!/usr/bin/env bash
false | true
echo $?

$ bash test.sh
0

有人可以解释一下为什么吗?

答案1

bash 的标准行为是返回管道中最后一个命令的退出状态,如脚本中所示。看来您已启用管道故障交互式 shell 中的选项强制以非零退出状态返回最后一个命令。下面是它的工作原理:

$ set -o pipefail    # enable pipefail
$ false | true
$ echo $?
1

$ set +o pipefail    # disable pipefail
$ false | true
$ echo $?
0

相关内容