我想在发生任何故障(包括管道内部故障)时终止脚本。在bash中,你可以set -eo pipefail,但这在 ksh 中不起作用。
例子:
\n\n# x\nset -eo pipefail\nfalse | true\necho "done: $?" # reached in ksh, unexpected\nfalse\necho "done2" # not reached in either shell, as expected\nRun Code Online (Sandbox Code Playgroud)\n\nbash x # prints nothing, as expected\nksh x # done: 1\nksh --version # ... 93u+ 2012-08-01\nRun Code Online (Sandbox Code Playgroud)\n\n为什么 ksh 在这种情况下不会退出?
\n\n编辑:添加另一个测试
\n\n我将其与其他 shell 进行了比较,得到了不同的结果:
\n\n-bash-5.0$ zsh -c \'set -eo pipefail; false | true; exit 2\' ; echo $?\n1\n-bash-5.0$ ksh -c \'set -eo pipefail; false …Run Code Online (Sandbox Code Playgroud)