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

kal*_*gne 4 bash pipe exit exit-status

以下 bash 管道返回 1:

$ false | true
$ echo $?
1
Run Code Online (Sandbox Code Playgroud)

但是,在脚本中执行时它返回 0:

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

$ bash test.sh
0
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么吗?

jim*_*mij 7

bash 的标准行为是返回管道中最后一个命令的退出状态,就像在您的脚本中一样。看起来您在交互式 shell 中启用了pipefail选项,该选项强制返回具有非零退出状态的最后一个命令。下面是它的工作原理:

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

$ set +o pipefail    # disable pipefail
$ false | true
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)