当我跳出循环时触发非零退出代码

dimo414

我想运行一系列任务,但是如果其中任何一个失败,就停止运行,因此我已经写了(类似):

for task in [TASKS]; do
  process "$task" || break
  commit "$task"
done

这可以正常工作,但是(如指定),即使我们提前中断,此循环的退出状态也为零。理想情况下break-ing将能够传达故障。

我知道返回0是记录的行为break,但是我很好奇是否有任何相对干净的解决方法。我能想象的最好的办法是将其包装在函数中并设置一个didBreak变量,然后将其用作(函数的)退出状态。可以,但是感觉太复杂了。

斯蒂芬·查泽拉斯

! break在许多外壳中使用工程(在我的测试中,除了基于pdksh的外壳和shFreeBSD的外壳(通过 设计)):

$ zsh -c 'for i in x; do ! break; echo "$i"; done'; echo "$?"
1
$ bash -c 'for i in x; do ! break; echo "$i"; done'; echo "$?"
1
$ ksh88 -c 'for i in x; do ! break; echo "$i"; done'; echo "$?"
1
$ ksh93 -c 'for i in x; do ! break; echo "$i"; done'; echo "$?"
1
$ dash -c 'for i in x; do ! break; echo "$i"; done'; echo "$?"
1
$ yash -c 'for i in x; do ! break; echo "$i"; done'; echo "$?"
1
$ bosh -c 'for i in x; do ! break; echo "$i"; done'; echo "$?"
1
$ pdksh -c 'for i in x; do ! break; echo "$i"; done'; echo "$?"
0
$ mksh -c 'for i in x; do ! break; echo "$i"; done'; echo "$?"
0
$ posh -c 'for i in x; do ! break; echo "$i"; done'; echo "$?"
0

请注意,它不会errexit在任何一个中触发

去年,在奥斯汀小组(POSIX背后的机构)邮件列表中对此进行了讨论讨论(涉及到boshFreeBSDsh和NetBSD的维护者sh)在达成共识之前就已经消亡了,但是普遍的观点似乎是POSIX要求行为!被证明是否定了命令的退出状态,并且break是一个特殊的内置命令,以0退出状态退出。

但是,如果将相同的推理return应用于例如,您将看到更少的外壳符合要求。

在中zsh,您可以使用return匿名函数代替break

$ () for i in x y; do echo $i; return 1; done
x
$ echo $?
1

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当我无法处理异常时,为什么退出代码为零(“良好”)?

来自分类Dev

当我添加原始资源文件夹时,““ aapt.exe”以非零退出值完成”崩溃

来自分类Dev

当用户输入退出或退出 c# 时跳出循环

来自分类Dev

归档时“命令PhaseScriptExecution失败,退出代码非零”

来自分类Dev

lsof的非零退出代码

来自分类Dev

当子级退出且退出代码为非零时,父级脚本继续运行

来自分类Dev

Docker-compose退出代码应该为非零时看起来为零

来自分类Dev

BufferedReader提供非零退出代码

来自分类Dev

命令MergeSwiftModule失败,退出代码非零

来自分类Dev

Apache CGI-非零退出代码

来自分类Dev

launchctl 进程显示非零退出代码

来自分类Dev

每当我退出页面然后返回时,Angular $ http都会触发

来自分类Dev

我的代码给出了 java.lang.StringIndexOutOfBoundsException 和命令以非零状态退出

来自分类Dev

当IPython遇到运行脚本的异常时,生成非零退出代码

来自分类Dev

设置-e时,Posix Shell测试非零退出代码脚本终止

来自分类Dev

当我使用-1退出循环时,为什么会得到ArrayIndexOutOfBounds?

来自分类Dev

iOS-当我创建NSManagedObject子类时->链接器命令失败,退出代码为1

来自分类Dev

当我退出数组时奇怪的输出

来自分类Dev

我的终端中以非零代码退出的任何命令都会关闭我的终端窗口

来自分类Dev

当我使用选择器正常功能时,ReactJs状态在循环中触发

来自分类Dev

CircleCI对非零退出代码有什么作用?

来自分类Dev

Xcode 11.2.1-命令CodeSign失败,退出代码非零

来自分类Dev

Xcode链接-命令Ld失败,退出代码非零

来自分类Dev

Flutter:命令PhaseScriptExecution失败,退出代码非零

来自分类Dev

禁止输出,除非退出代码为非零

来自分类Dev

为什么不反斜杠产生非零退出代码

来自分类Dev

如果发生错误,使`find`返回非零退出代码

来自分类Dev

salt state.apply 返回非零退出代码

来自分类Dev

用我当前的代码退出循环

Related 相关文章

  1. 1

    当我无法处理异常时,为什么退出代码为零(“良好”)?

  2. 2

    当我添加原始资源文件夹时,““ aapt.exe”以非零退出值完成”崩溃

  3. 3

    当用户输入退出或退出 c# 时跳出循环

  4. 4

    归档时“命令PhaseScriptExecution失败,退出代码非零”

  5. 5

    lsof的非零退出代码

  6. 6

    当子级退出且退出代码为非零时,父级脚本继续运行

  7. 7

    Docker-compose退出代码应该为非零时看起来为零

  8. 8

    BufferedReader提供非零退出代码

  9. 9

    命令MergeSwiftModule失败,退出代码非零

  10. 10

    Apache CGI-非零退出代码

  11. 11

    launchctl 进程显示非零退出代码

  12. 12

    每当我退出页面然后返回时,Angular $ http都会触发

  13. 13

    我的代码给出了 java.lang.StringIndexOutOfBoundsException 和命令以非零状态退出

  14. 14

    当IPython遇到运行脚本的异常时,生成非零退出代码

  15. 15

    设置-e时,Posix Shell测试非零退出代码脚本终止

  16. 16

    当我使用-1退出循环时,为什么会得到ArrayIndexOutOfBounds?

  17. 17

    iOS-当我创建NSManagedObject子类时->链接器命令失败,退出代码为1

  18. 18

    当我退出数组时奇怪的输出

  19. 19

    我的终端中以非零代码退出的任何命令都会关闭我的终端窗口

  20. 20

    当我使用选择器正常功能时,ReactJs状态在循环中触发

  21. 21

    CircleCI对非零退出代码有什么作用?

  22. 22

    Xcode 11.2.1-命令CodeSign失败,退出代码非零

  23. 23

    Xcode链接-命令Ld失败,退出代码非零

  24. 24

    Flutter:命令PhaseScriptExecution失败,退出代码非零

  25. 25

    禁止输出,除非退出代码为非零

  26. 26

    为什么不反斜杠产生非零退出代码

  27. 27

    如果发生错误,使`find`返回非零退出代码

  28. 28

    salt state.apply 返回非零退出代码

  29. 29

    用我当前的代码退出循环

热门标签

归档