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)
有人可以解释为什么吗?
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)