使用 set -e 避免丢失我的 Shell

使用 set -e 避免丢失我的 Shell

我想在 bash 脚本中使用 set -e ,但每次运行它时,任何错误都会杀死我的 shell。

  say I have script.sh:

  #! /usr/bin/env bash
  set -e
  my_commmand
  my_other_command

my_command无论我是否这样做,都会出现错误炸毁我的外壳:

 % ./script.sh (after chmod)

或者

 % . ./script.sh

一定有一个简单的方法可以解决这个问题。

答案1

您的意思是您的交互式 shell 退出了吗?

如果您获取从交互式 shell 中设置的脚本(使用.set -e,则“exit-on-error”标志也将在交互式 shell 中设置。如果您之前已经这样做过,那么它将适用于您之后运行的任何命令,无论是源脚本 ( . ./script.sh) 还是正常启动的脚本 ( ./script.sh)。

解决方案是不要源脚本set -e

您可能还想查看Bash常见问题解答 105关于其他问题set -e

答案2

如果您想set -e进入交互式 shell,并且想要执行可能返回非零的命令,则需要捕获该退出代码。一种方法:

$ some_command || :

其他:

$ if ! some_command; then :; fi

答案3

如果您确实在登录 shell 中调用过set -e,然后运行返回复合语句中未使用的非零退出代码的命令,那么您的登录 shell 将退出:

set -e
false

会将您注销。

set -e如果您曾经运行过包含使用您在登录 shell 中. ./script设置的脚本。-e

如果您稍后运行任何带有非零退出代码的命令:bingo。

相关内容