我已经编写了一个Bash安装脚本来帮助人们安装我为名为Minetest的游戏制作的mod 。该脚本执行成功,并将当前文件夹复制到.../minetest_game/mods
。
但是,我设置了另一个选项,允许用户通过运行来更改安装了Mod的子游戏(文件夹)./install.sh other_subgame
。这将成功运行,并将mod安装在正确的文件夹中。但是,我没有回到脚本的结尾,而是带回到了名为的上一个函数subStall
。请注意,当我仅运行时./install
,不会发生这种情况。
当该substall
函数在最后再次运行时,用户可以使用Ctrl+C
并退出,但是仍然很烦人,可能会使某些用户感到困惑。
有任何想法吗?如果您想查看我的完整脚本,可以在此处查看。谢谢!
首先是调试建议。当您不知道脚本在做什么时,可以添加脚本set -x
。然后,shell将在运行它之前打印出每个运行的命令。(您可以做其他事情,并且可以以更精确的方式进行更高精度的调试,但这是一个很好的第一步。)这样做可能会让您按照程序的流程来查看发生了什么。
其次,请尝试在帖子中包含针对您的问题的MCVE(或至少包括pastebin或gist或其他git repo)。通常人们不愿让人们下载文件,这使得人们实际花费时间调查您的问题的可能性大大降低。
就是说,您无需执行此操作即可跟踪流程并查看正在发生的事情(假设我正确地遵循了该流程)。
看起来问题在于在线上145
您检查是否$subgame
已传递给脚本,如果已传递给脚本,则您立即调用midCheck
(在线149
并midCheck
最终调用install
)。之后,您继续执行该subStall
函数,最后单击再次162
调用的行。midCheck
我认为这就是您所看到的。修复该问题(通过在调用midCheck
该if
语句之后退出,或者仅在未设置状态下才检查$subgame
并运行这些行152-159
,然后仅midCheck
在一个位置进行调用才可以解决此问题)。
作为附加评论。避免在多个位置(针对各种if
条件)调用同一函数可能是一个好主意。您可能还希望通过http://www.shellcheck.net/运行脚本,以查看其捕获了哪些常见问题(例如未使用的变量等)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句