首页 > 解决方案 > 为什么 bash 脚本在前台作业出错后停止?

问题描述

在我的 bash 脚本开始时,我禁止脚本在遇到错误时停止(因为我希望我的脚本在这种情况下继续执行):

set +e

然后我将程序作为作业运行,运行一些中间命令,然后将作业带回前台。我实际上是在一个循环中执行此操作,以便在发生任何错误时程序不断重新启动。

set -m # enable job control

while :
do
    ./my_program &
    export BOT_PID=$!
    export BOT_JID=$(jobs -l | grep -oP "\[\K[0-9]+(?=\]. $BOT_PID)")
    # ... some intermediary commands
    fg $BOT_JID
    test $? -gt 128 && break
done

我的程序崩溃了,这很好,但由于某种原因,这导致脚本停止运行,并使我重新获得对运行 shell 脚本的终端的控制权。

在此处输入图像描述 在此处输入图像描述

line 16以上是指fg命令。

我不知道如何解决这个问题。当我的程序崩溃时,shell 脚本应该继续。

有任何想法吗?

标签: basherror-handlingjobs

解决方案


我似乎已经通过删除以下行来修复它:

test $? -gt 128 && break

而是将上面的行添加到循环的顶部:

trap "exit 0" SIGINT

推荐阅读