如何调试运行的bash脚本

时间:2014-09-23 12:52:06

标签: linux bash debugging

我在Ubuntu上运行了一个bash脚本。 是否可以在不重启脚本的情况下看到现在执行的行/命令。

问题是脚本有时永远不会退出。这真的很难重现(现在我抓住了它),所以我不能停止脚本并开始调试。

任何帮助都会非常感激

P.S。脚本逻辑很难理解,所以我无法弄清楚为什么它被思想的力量所冻结。

1 个答案:

答案 0 :(得分:3)

尝试查找shell的进程ID(pid),您可以使用ps -ef | grep <script_name> 让我们在shell变量$PID中设置此pid。 通过以下方式查找此$PID的所有子进程:

ps --ppid $PID

您可能会发现一个或多个(例如,它被卡在一系列流水线的命令中)。重复此命令几次。如果它没有改变,这意味着脚本卡在某个命令中。在这种情况下,您可以将trace命令附加到正在运行的子进程:

sudo strace -p $PID

这将显示正在执行的内容,无论是无限循环(如从管道读取)还是等待一些从未发生过的事件。

如果您发现ps --ppid $PID更改,则表示您的脚本正在推进,但它已卡在某处,例如脚本中的本地循环。通过更改命令,它可以提示您在脚本中循环的位置。