在我看来(如果我错了请纠正我)bash 在正确告诉你脚本中问题出在哪里的错误消息方面相当糟糕。例如,我经常会得到“bad EOF at line 953”。这是什么真的意思是第 127 行缺少一个。fi
或者,另一个经典是“-bash: line 60:在意外标记 '('”附近出现语法错误。这是什么真的意思是我mything() {}
在第 739 行将我的函数重新声明为别名alias mything=
,除了 bash 错误指向第 60 行,其中没有实际问题(所以我花了一段时间才在第 739 行找到罪魁祸首)。
我尝试将最热门的“bash 调试”工具加载到 VS Code 中,但无法使其正常工作(我按 F5 运行,然后出现一个框,显示“选择调试器”,所以我选择 bash 调试,但没有任何反应) 。我尝试过一个在线工具,它允许交互式运行代码,并说它可以帮助调试,但这也没有帮助。我使用了一些 PowerShell,它在报告问题根源方面做得更好。有没有方法(github 或在线上的工具或脚本分析工具可以扫描脚本以查找诸如使用相同名称重新声明的函数和别名以及类似的其他测试等问题)使我们能够更好地调试 bash 脚本?
答案1
我在德语 shell 脚本中找到了这个简单的 shell 断点调试器书。您可以在想要开始调试的位置添加以下两行,并通过按 Enter 键逐步执行或在运行时评估变量和函数。
read var # set simple breakpoint
echo -e "dbg> \c"; read cmd; eval $cmd
运行脚本
$ dbg> doSomethingFunction
$ dbg> echo $SOME_VAR
或者使用set -x
和修改提示变量PS4
在过去对我有帮助。
PS4='+ ${BASH_SOURCE##*/}.${LINENO} ${FUNCNAME}: '