gpt4 book ai didi

bash - 结合使用 bash 选项进行错误处理(例如 pipefail、errexit、inherit_errexit)

转载 作者:行者123 更新时间:2023-12-05 00:51:53 27 4
gpt4 key购买 nike

考虑以下 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com