为什么 bash 脚本在前台作业出错后停止?

Why is bash script stopping after error from foreground job?

在我的 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

我的程序崩溃了,这很好,但由于某种原因,这导致脚本停止 运行ning,并让我重新获得对 shell 脚本 [=] 终端的控制权34=] 英寸

上面的

line 16指的是fg命令。

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

有什么想法吗?

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

test $? -gt 128 && break

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

trap "exit 0" SIGINT