停止 .bashrc 而不退出 shell

停止 .bashrc 而不退出 shell

我的 .bashrc 文件是模块化的,并且我在其中进行了一些错误检查。在 bash 脚本中,我通常有一个函数 _errexit (或类似的函数),当我检测到错误并想要退出时,我会调用它。

对于我的 bashrc 文件,我不想退出(它会关闭 shell) - 但我确实想显示错误消息并立即停止处理。

有什么想法可以做到这一点吗?

答案1

在 BASH 中,您可以使用return内置的:

返回[n]

导致函数退出并返回 n 指定的返回值。如果省略 n,则返回状态为函数体中最后执行的命令的状态。 如果在函数外部使用,但在 . (source) 命令,它会导致 shell 停止执行该脚本,并返回 n 或脚本内执行的最后一个命令的退出状态作为脚本的退出状态。 如果在函数外部使用并且不是在 . 执行脚本期间使用,则返回状态为 false。与 RETURN 陷阱关联的任何命令都会在函数或脚本之后恢复执行之前执行。

对于其他 shell,它的工作方式当然可能有所不同。

如果您可以将主脚本重写为循环,则可以break根据循环命令的结果使用该语句。

答案2

检查处理结果,只有在没有失败的情况下才继续。

module_1
if [ $? -ne 0 ]; then
   display_error_function
else
   module_2
   if [ $? -ne 0 ]; then
      display_error_function
   else
      echo OK
   fi
fi

当您有很多模块时,请考虑使用额外的 shell 变量。
编辑:使用额外的变量,您可以防止深层嵌套(只需重复 if 块)。

ERRORSFOUND=0
...
if [[ ${ERRORSFOUND} -eq 0 ]]; then
   module_x
   if [[ $? -ne 0 ]]; then
      ERRORSFOUND=1
   fi
fi

相关内容