bash: 如果一步错误退出,则停止标记为失败的子 shell 脚本

bash: stop subshell script marked as failed if one step exits with an error

我是 运行 通过 HPC 上的 SLURM 作业调度程序编写的脚本。

我正在通过主脚本调用子 shell 脚本。

子shell脚本包含几个步骤。由于数据质量,脚本中的某个步骤有时会失败;进一步的步骤不需要此步骤,但如果此步骤失败,我的整个子 shell 脚本将在作业调度程序中标记为“失败”状态。但是,我需要此子 shell 脚本在作业调度程序中具有“已完成”状态,因为它依赖于我的主脚本。

我试过设置

set +e

在我的子 shell 脚本中,就在可选步骤之前,但它似乎不起作用:我仍然在作业调度程序中得到一个带有错误和 FAILED 状态的退出代码。

简而言之:我需要子 shell 脚本在作业调度程序中将状态设置为“已完成”,无论某个特定步骤是否已完成并出现错误。将不胜感激。

对于使用 sbatch 提交的 Slurm 作业,作业退出代码被视为提交脚本本身的 return 代码。 Bash 脚本的 return 代码是脚本中最后一个命令的代码。

因此,如果您只是以 exit 0 结束脚本,Slurm 无论如何都应该考虑 COMPLETED