以下 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