为什么 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
在我的 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