作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑以下 Bash 脚本:
#!/usr/bin/env bash
set -o errexit pipefail
shopt -s inherit_errexit
( echo hello ; exit 1 ) | cat
echo world
运行5.0.17版本,输出如下:
hello
world
但是,负责打印 hello
的子 shell 将失败,退出状态为非零。管道的一部分,启用选项pipefail
,整个管道应该同样失败,具有相同的状态(管道中的后续项目当然会自行返回零状态)。因此,管道应该评估为非零状态,由于 errexit
(如果不是 inherit_errexit
也是如此)将提示脚本立即终止,而不会到达最终语句打印世界
。
正如所见,没有达到最终打印语句的预测是不准确的。
为什么?
最佳答案
您只是在设置 errexit
设置,而不是 pipefail
。 -o
后面不能放多个选项,需要重复-o
选项。其他所有内容都被放入位置参数中。
所以改变
set -o errexit pipefail
到
set -o errexit -o pipefail
关于bash - 结合使用 bash 选项进行错误处理(例如 pipefail、errexit、inherit_errexit),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70934083/
考虑以下 Bash 脚本: #!/usr/bin/env bash set -o errexit pipefail shopt -s inherit_errexit ( echo hello ; ex
我是一名优秀的程序员,十分优秀!