bash - 为什么 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 脚本应该继续。
有任何想法吗?
解决方案
我似乎已经通过删除以下行来修复它:
test $? -gt 128 && break
而是将上面的行添加到循环的顶部:
trap "exit 0" SIGINT
推荐阅读
- python - 在 python 中如何添加文本和转发多部分 email.message
- sql - SQL。每个用户的完整日期范围
- asp.net-core - 如何在 ASP.NET Core 3.1 中实现自定义 ValidateAntiforgeryTokenAuthorizationFilter
- sql - 解决复合实体中重复的复合主键
- python - 初学者:如何预测多个布尔输出(keras/张量流)
- python - Apache Spark PySpark 连接到 MSSQL 数据库 JDBC
- python - 将 view.py 添加到烧瓶 Web 应用程序
- google-apps-script - 添加时间戳的脚本
- r - 如何以非阻塞方式运行闪亮?
- linux - 在我的命令之前添加 sudo 时找不到命令