gpt4 book ai didi

error-handling - 为什么用errexit不能与命令列表一起使用?

转载 作者:行者123 更新时间:2023-12-04 08:26:25 25 4
gpt4 key购买 nike

如果我以普通用户身份运行以下Shell脚本,则该脚本将按预期在第三行中止:

set -o errexit

echo foo > /bar
echo $?

这是输出:
$ sh test1.sh 
test.sh: 3: test.sh: cannot create /bar: Permission denied

但是,如果echo命令是复合列表的一部分,则执行失败的命令后将继续执行并显示退出代码:
set -o errexit

{ echo foo; } > /bar
echo $?

这是输出:
$ sh test2.sh 
test.sh: 3: test.sh: cannot create /bar: Permission denied
2

脚本为什么不中止?另一方面,如果我将花括号更改为括号,则其工作方式将与我期望的一样。

最佳答案

POSIX规范指出a shell "may exit" if a redirection error occurs with a compound command

如果复合命令是subshel​​l命令(bash),(...)选择退出,否则选择不退出。我不知道这种区别的理由;它本质上可能是历史性的。
set -e有许多怪异之处,并且通常不会像您期望的那样表现。许多人建议您不要使用它。

关于error-handling - 为什么用errexit不能与命令列表一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56175244/

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