Bash脚本循环返回而不是退出

八面体

我已经编写了一个Bash安装脚本来帮助人们安装我为名为Minetest的游戏制作的mod 该脚本执行成功,并将当前文件夹复制到.../minetest_game/mods

但是,我设置了另一个选项,允许用户通过运行来更改安装了Mod的子游戏(文件夹)./install.sh other_subgame这将成功运行,并将mod安装在正确的文件夹中。但是,我没有回到脚本的结尾,而是带回到了名为的上一个函数subStall请注意,当我仅运行时./install,不会发生这种情况。

当该substall函数在最后再次运行时,用户可以使用Ctrl+C并退出,但是仍然很烦人,可能会使某些用户感到困惑。

有任何想法吗?如果您想查看我的完整脚本,可以在此处查看谢谢!

伊坦·赖斯纳(Etan Reisner)

首先是调试建议。当您不知道脚本在做什么时,可以添加脚本set -x然后,shell将在运行它之前打印出每个运行的命令。(您可以做其他事情,并且可以以更精确的方式进行更高精度的调试,但这是一个很好的第一步。)这样做可能会让您按照程序的流程来查看发生了什么。

其次,请尝试在帖子中包含针对您的问题MCVE(或至少包括pastebin或gist或其他git repo)。通常人们不愿让人们下载文件,这使得人们实际花费时间调查您的问题的可能性大大降低。

就是说,您无需执行此操作即可跟踪流程并查看正在发生的事情(假设我正确地遵循了该流程)。

看起来问题在于在线上145您检查是否$subgame已传递给脚本,如果已传递给脚本,则您立即调用midCheck(在线149midCheck最终调用install)。之后,您继续执行该subStall函数,最后单击再次162调用的midCheck

我认为这就是您所看到的。修复该问题(通过在调用midCheckif语句之后退出,或者仅在未设置状态下才检查$subgame并运行这些行152-159,然后仅midCheck在一个位置进行调用才可以解决此问题)。

作为附加评论。避免在多个位置(针对各种if条件)调用同一函数可能是一个好主意。您可能还希望通过http://www.shellcheck.net/运行脚本,以查看其捕获了哪些常见问题(例如未使用的变量等)。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

采购Bash脚本-返回错误,而不是退出?

来自分类Dev

Bash脚本不会循环退出

来自分类Dev

在while循环中退出bash脚本

来自分类Dev

While 循环退出而不是返回到循环的顶部 -Python

来自分类Dev

Bash脚本从NodeJs脚本返回退出代码

来自分类Dev

Bash脚本从NodeJs脚本返回退出代码

来自分类Dev

执行bash脚本循环而不会错误退出

来自分类Dev

Bash 脚本循环在 If 语句上过早退出

来自分类Dev

将Java系统退出值返回到bash脚本

来自分类Dev

从使用$()的bash脚本退出

来自分类Dev

bash脚本的错误返回码不是我发送的值

来自分类Dev

Bash脚本编写-循环直到返回值为0

来自分类Dev

退出bash功能,而不是终端

来自分类Dev

Bash脚本退出清理

来自分类Dev

bash脚本中的退出状态

来自分类Dev

Bash在脚本中退出sudo

来自分类Dev

无法正确退出bash脚本

来自分类Dev

return 不是退出循环并返回 true 作为此代码中的最后一条语句吗?

来自分类Dev

处理第一行后,Bash脚本中的for循环退出

来自分类Dev

通过ssh执行的bash脚本返回不正确的退出代码0

来自分类Dev

通过ssh执行的bash脚本返回不正确的退出代码0

来自分类Dev

我可以在bash函数/脚本中使用哪些返回/退出值?

来自分类Dev

在脚本中退出bash命令而不退出脚本

来自分类Dev

确保即使子脚本退出,父bash脚本也不会退出

来自分类Dev

在脚本中退出bash命令而不退出脚本

来自分类Dev

在我的某些服务器列表的bash循环中,脚本在使用ssh执行perl脚本后退出

来自分类Dev

bash脚本中的for循环

来自分类Dev

挂bash循环脚本?

来自分类Dev

bash脚本-循环功能