我目前正在使用这样的东西:
(
false
true
) && echo "OK" || echo "FAILED";
Run Code Online (Sandbox Code Playgroud)
它不起作用.如果某些内容失败,我希望子shell退出并返回错误(在这种情况下为false).目前只有在最后一个命令失败时才会失败.
它应该只退出当前的子shell而不是整个脚本.
我将这个脚本提供给人们,我不希望他们看到所有的输出,但如果脚本成功与否,仍然会给他们某种响应.
编辑:上面的子shell中的命令只是一个例子.我想在子shell中运行多个命令,而不检查每个命令后的返回值.类似set -e的子壳.
Edit2:我尝试在子shell中添加set -e.也许我做错了但它并没有改变我的脚本的行为.它没有使用非0代码停止执行或退出子shell.
(
set -e
false
echo "test"
) && echo "OK" || echo "FAILED";
Run Code Online (Sandbox Code Playgroud)
首先打印测试,然后确定.它应该因为错误而打印FAILED.
bashset -e 在像 foo || true,这样的条件表达式中的这种效果是已知的并且被认为是一个问题。我认为有充分的理由同时讨厌set -e和 shell 脚本。
第一个链接提出以下建议。它在小例子中看起来不错,但在现实世界中可能不太清楚。
通过将一系列带有“&&”的命令串在一起来进行自己的错误检查,如下所示:
Run Code Online (Sandbox Code Playgroud)mkdir abc && cd abc && do_something_else && last_thing || { echo error >&2; exit 1; }一些重要的注意事项: 您不需要尾部反斜杠。您不缩进以下行。您必须坚持每行 80 个字符,以便每个人都可以看到“&&”或“||” 在末尾。如果您需要混合 AND 和 OR,请使用不会产生子外壳的 { 这些大括号 } 进行分组。