首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何撤消"set -e"的效果,如果任何命令失败,会立即退出bash?

要撤消"set -e"的效果,即使任何命令失败也不会立即退出bash,可以使用"set +e"命令。这个命令会关闭"set -e"的错误终止功能,使得即使命令失败,脚本也会继续执行下去。

"set -e"是bash中的一个选项,它会在任何命令返回非零退出状态时立即终止脚本的执行。这在脚本中可以用来确保命令执行成功,否则立即停止脚本的执行。

以下是一个示例脚本,展示了如何使用"set -e"和"set +e"来控制脚本的错误终止行为:

代码语言:bash
复制
#!/bin/bash

set -e

# 这里是一些命令和代码

# 关闭错误终止功能
set +e

# 这里是一些可能会失败的命令和代码

# 再次开启错误终止功能
set -e

# 这里是一些命令和代码

# 脚本的其余部分

在上面的示例中,"set -e"命令在脚本的开头启用了错误终止功能,确保任何命令失败时立即退出脚本。然后,使用"set +e"命令关闭了错误终止功能,执行一些可能会失败的命令和代码。最后,使用"set -e"命令再次开启错误终止功能,确保脚本的其余部分在遇到错误时立即退出。

这样,通过在需要的地方使用"set +e"和"set -e"命令,可以灵活控制脚本的错误终止行为,使得脚本在遇到错误时可以继续执行下去。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

在Bash编程中 set -e 与 trap exit ERR 有什么相同点和不同点

不同点 控制粒度: set -e提供的是全局性的错误处理机制,一旦任何命令失败,整个脚本立即终止。这可能导致在某些情况下过于严格,比如在预期某些命令可能会失败但希望后续命令继续执行的场景。...行为细节: set -e有一些例外情况不会导致脚本退出,比如在某些复合命令内部的失败,或者是失败命令出现在&&、||、if、while、until结构中。...使用trap可以让开发者完全控制错误处理逻辑,包括决定何时、如何响应特定类型的错误,以及是否让脚本继续执行。 提示信息: set -e:当命令失败时,脚本会直接退出,无额外的打印信息。...而set -e不直接提供这种资源管理功能。 兼容性: set -e:几乎所有的 Bash 版本都支持。...综上所述,set -e 提供了一种快速简单的错误退出机制,适合那些希望在命令失败时立即停止脚本的场景。

23610

Shell脚本的调试和错误处理(二)

错误处理可以帮助我们在脚本出错时及时发现问题,避免脚本出现不可预期的行为。下面是一些常见的Shell脚本错误处理技术:1.检查返回值每个Shell命令都有一个返回值,通常是0表示成功,非0表示失败。...exit 1fi在该脚本中,我们先执行了一个ls /etc/passwd命令,然后检查了该命令的返回值。如果返回值不是0,说明命令执行失败,此时我们输出错误信息并使用exit命令退出脚本。...2.使用set -e命令set -e命令可以使脚本在发生错误时立即停止执行。当set -e命令启用后,脚本会在执行任何一个命令失败时立即退出,并返回一个非零的退出码。例如:#!...在该脚本中,当执行ls /etc/passwd命令失败时,脚本会立即退出,并且不会执行后面的echo语句。...当执行ls /etc/passwd命令失败时,Shell会立即执行error_handler函数,并退出脚本。

1.6K10
  • 编写可靠 bash 脚本的一些技巧

    0. set -x -e -u -o pipefail 在写脚本时,在一开始(Shebang 之后)加上下面这一句,或者它的缩略版,能避免很多问题,更重要的是能让很多隐藏的问题暴露出来: set -xeuo...正式运行的脚本也可以不加。 -e :遇到一个命令失败(返回码非零)时,立即退出。 bash 跟其它的脚本语言最大的不同点之一,应该就是遇到异常时继续运行下一条命令。这在很多时候会遇到意想不到的问题。...加上 -e ,会让 bash 在遇到一个命令失败时,立即退出。 如果有时确实需要忽略个别命令的返回码,可以用 || true 。...如果想让管道中任意一条命令失败就退出,就要用后面提到的-o pipefail 了。 加-e 有时候可能会不太方便,动不动就退出。...-u :试图使用未定义的变量,就立即退出。 如果在 bash 里使用一个未定义的变量,默认是会展开成一个空串。

    1.2K21

    shell | 开启debug模式

    这时可以使用shell脚本中 set 指令的四个参数:-e、-u、-x、-o pipefail 命令报错即返回值($?)...不为0 set -e# set -e 选项可以在脚本出现异常的时候立即退出,后续命令不再执行,相当于打上了一个断点 if 判断条件里出现异常也会直接退出,如果不希望退出可以在判断语句后面加上 ||.../bin/bash set -e foo echo "hello" 执行结果 ./test.sh: line 5: foo: command not found 阻止立即退出的例子# #!...,即最后一个命令返回值为 0 则判断整条管道语句是正确的 如下 set -o pipefail 的作用就是管道中只要有一个命令失败,则整个管道视为失败 before# #!...,坏处就是 bash 的 log 会格外的乱 另外,它在打印的时候会先把变量解析出来 纵然 log 可能会乱一些,但也比debug的时候掉头发强 #!

    1.3K30

    linux26-命令除错不完全指南

    但退出码的范围为0-255,因此如果退出码为大于该区间的数,则shell 会通过模运算取余。如300,则会返回44,300%256=44。...实际开发中,如果某个命令失败,往往需要脚本停止执行,防止错误累积。...比如: set -e command 1 set +e command1 command2 set -e 就可以让1,2 位置的命令可以在运行失败的情况下,使脚本继续运行。...也就是说,只要最后一个子命令不失败,管道命令总是会执行成功,因而set -e 也就失效了: ❯ cat > script.sh a=3 b | echo $a c=33 echo $c ^C ❯ bash...: set -o errexit # -e set -o nounset # -u set -o pipefail 5-忽略错误 执行脚本的时候,如果遇到不存在的变量,shell 默认会忽略它: ❯

    94020

    vim常用命令总结

    4.撤销 如果你误删了过多的内容。显然你可以再输入一遍,但是命令"u" 更简便,它可以撤消上一次的操作。 5.重做 如果你撤消了多次,你还可以用CTRL-R(重做)来反转撤消的动作。...换句话说,它是对撤消的撤消。撤消命令还有另一种形式,"U"命令,它一次撤消对一行的全部操作。第二次使用该命令则会撤消前一个"U"的操作。用"u"和CTRL-R你可以找回任何一个操作状态。...指定的数字要紧挨在它所要修饰的命令前面。 8.退出 要退出Vim,用命令"ZZ"。该命令保存当前文件并退出Vim。 9.放弃编辑 丢弃所有的修改并退出,用命令":q!"。用":e!"...0"命令却不能接受类似这样的计数,命令"^"前加上一个计数也没有任何效果。 12.移动到指定字符上 命令"fx"在当前行上查找下一个字符x(向右方向),可以带一个命令计数"F"命令向左方向搜索。"... 三种状态 Command: 任何输入都会作为编辑命令,而不会出现在屏幕上,任何输入都引起立即反映 Insert:  任何输入的数据都置于编辑寄存器,按ESC,可跳回command方式 Escape:

    1.3K10

    Shell 编程(1)

    如果 echo 不加任何引号,不能输出分号";",因为分号会被 shell 解析为命令链接符号。...建议定义了颜色后同时定义关闭颜色,否则颜色会继续影响bash环境的颜色。定义转义序列的"\e"可以使用"\033"替换。...; 命令之间没有逻辑关系,分号连接的命令会按照顺序从前向后依次执行,即使分号前面的命令执行失败也不影响后面的命令执行。 ➜ ~ ls nas;echo 'Hello!'...在 bash 中,使用预定义变量 $? 判断命令是否成功执行,如果"$?"的值为0则表示前一条命令正确执行,其他任意退出值均表示不能正确执行。...如果&符号连接了两个命令,则其前面的命令被放入后台,立即执行后面的命令,所以可以简单地认为这两个命令是并行执行的,两端的命令之间也没有任何逻辑关系。

    1K11

    Linux 命令(230)—— set 命令(builtin)

    使用 set 更改 Shell 运行环境时,符号"+“和”-"的作用分别是打开和关闭指定的模式。 注意,如果命令行下不带任何参数,直接运行set,会显示所有的环境变量和 Shell 函数。...-e 若指令传回值不等于0,则立即退出 Shell。 -f 取消使用通配符。 -h 自动记录函数的所在位置。 -H Shell 可利用”!”...set -o nounset (4)脚本执行时打印出命令。 默认情况下,脚本执行后,屏幕只显示运行结果,没有其他内容。如果多个命令连续执行,它们的运行结果就会连续输出。...bash script.sh + echo bar bar 可以看到,执行echo bar之前,该命令会先打印出来,行首以+表示。这对于调试复杂的脚本是很有用的。.../A 使用emacs内置编辑器进行命令行编辑,是一个默认设置 errexit -e 当命令返回一个非零退出状态(失败)时退出。

    4.5K20

    shell脚本还能这么写?

    /bin/bash # set命令的奇妙用途留在文章末尾 set -eu # nginx配置文件在不同环境中,位置可能不同,所以需要将其抽离成可配置变量,脚本来引用 NGINX_CONFIG_FILE=...那如何实现类似其他编程语言的return效果呢?可以使用echo命令: #!..., 故将$@传递给main函数 main $@ 5.set命令 内置的set命令,可以改变我们脚本的执行行为,让我们对脚本的把握和调试更强,下面是常用的几种set指令,相信你会喜欢的: set -...e: bash脚本遇到错误立即退出 set -n: 检查脚本语法但不执行 set -u: 遇到未设置的变量立即退出 set -o pipefail: 控制在管道符执行过程中有错误立即退出 set -x:.../bin/bash set -euxo pipefail 检查bash脚本的语法时,可以这样写: bash -n main.sh 6.组命令 有的时候我们有这样的需求,对文本内容的修改,不是简单一条命令来实现

    1.4K20

    如何使用 Git 撤消(几乎)任何操作

    你可以提供要返回的分支名称或特定 SHA,或者默认情况下,Git 会假设你要切换到 HEAD,即当前分支上的最后一次 commit。 请记住:你以这种方式“撤消”的任何更改实际上都会消失。...你可以通过 reflog 恢复几乎任何内容(任何你 commit 的内容)。 你可能熟悉 git log 命令,它显示 commit 列表。...你不能使用 git reflog 来恢复其他开发人员未 push 的 commit 。 reflog* 那么……如何使用 reflog 来“恢复”之前“撤消”的一个或多个 commit ?...-b 创建新分支 - 这是创建新分支并立即 checkout 的流行快捷方式 - 但你不想立即切换到刚刚创建的分支。...你将 *.log 放入 .gitignore 文件中,但它仍然存在 - 你如何告诉 git “撤消”跟踪此文件中的更改?

    22210

    vim命令总结

    显然你可以再输入一遍,但是命令"u" 更简便,它可以撤消上一次的操作。 5.重做 如果你撤消了多次,你还可以用CTRL-R(重做)来反转撤消的动作。换句话说,它是对撤消的撤消。...撤消命令还有另一种形式,"U"命令,它一次撤消对一行的全部操作。第二次使用该命令则会撤消前一个"U"的操作。用"u"和CTRL-R你可以找回任何一个操作状态。...指定的数字要紧挨在它所要修饰的命令前面。 8.退出 要退出Vim,用命令"ZZ"。该命令保存当前文件并退出Vim。 9.放弃编辑 丢弃所有的修改并退出,用命令":q!"。用":e!"...$"命令还可接受一个计数,如"1$"会将光标移动到当前行行尾,"2$"则会移动到下一行的行尾,如此类推。"0"命令却不能接受类似这样的计数,命令"^"前加上一个计数也没有任何效果。...实际上,任何退出文件编辑的命令":quit"和"ZZ"都会关闭窗口,但是用":close"可以阻止你关闭最后一个Vim,以免以意外地整个关闭了Vim。

    80770

    如何使用 Git 撤消(几乎)任何操作

    你可以提供要返回的分支名称或特定 SHA,或者默认情况下,Git 会假设你要切换到 HEAD,即当前分支上的最后一次 commit。 请记住:你以这种方式“撤消”的任何更改实际上都会消失。...你可以通过 reflog 恢复几乎任何内容(任何你 commit 的内容)。 你可能熟悉 git log 命令,它显示 commit 列表。...你不能使用 git reflog 来恢复其他开发人员未 push 的 commit 。 reflog* 那么……如何使用 reflog 来“恢复”之前“撤消”的一个或多个 commit ?...-b 创建新分支 - 这是创建新分支并立即 checkout 的流行快捷方式 - 但你不想立即切换到刚刚创建的分支。...你将 *.log 放入 .gitignore 文件中,但它仍然存在 - 你如何告诉 git “撤消”跟踪此文件中的更改?

    20810

    如何使用 Git 撤消(几乎)任何操作

    你可以提供要返回的分支名称或特定 SHA,或者默认情况下,Git 会假设你要切换到 HEAD,即当前分支上的最后一次 commit。 请记住:你以这种方式“撤消”的任何更改实际上都会消失。...你可以通过 reflog 恢复几乎任何内容(任何你 commit 的内容)。 你可能熟悉 git log 命令,它显示 commit 列表。...你不能使用 git reflog 来恢复其他开发人员未 push 的 commit 。 reflog* 那么……如何使用 reflog 来“恢复”之前“撤消”的一个或多个 commit ?...-b 创建新分支 - 这是创建新分支并立即 checkout 的流行快捷方式 - 但你不想立即切换到刚刚创建的分支。...你将 *.log 放入 .gitignore 文件中,但它仍然存在 - 你如何告诉 git “撤消”跟踪此文件中的更改?

    36210

    教你写出健壮可靠的shell脚本!

    而为了保证脚本健壮可靠,那么就需要保证脚本在一些特殊的情况及早出现,避免漏网之鱼。来看看有哪些可行的技巧。 脚本失败时即退出 可以在脚本的开头设置如下: set -e 举个例子: #!.../bin/bash set -e lp #这里运行会出错 date 这种情况下,运行一旦出错就会退出,不放过一个问题: $ ..../bin/bash set -e lp || true date 不过个人觉得这样的设置用处不是特别大,因为很多时候就是需要处理不同的错误情况,而这样只能要么遇到错误退出,要么认为正确,导致无法走到异常分支...管道命令一个失败时整个失败 有时候我们可能会执行类似这样的命令: cat test.sh |grep if | cut -d ';' -f 2 三条命令一行执行,如果我们希望在其中一条失败,整个命令就失败...多条命令执行使用&& 例如: cmd0;cmd1;cmd1 这里如果cmd0失败了,后面的命令仍然会执行,而如果不希望后面的命令执行,可以使用: cmd0 && cmd1 && cmd1 使用函数

    2.6K10

    vim 学习笔记(四)—— 常用命令汇总

    4.撤销 如果你误删了过多的内容。显然你可以再输入一遍,但是命令"u" 更简便,它可以撤消上一次的操作。 5.重做 如果你撤消了多次,你还可以用CTRL-R(重做)来反转撤消的动作。...换句话说,它是对撤消的撤消。撤消命令还有另一种形式,"U"命令,它一次撤消对一行的全部操作。第二次使用该命令则会撤消前一个"U"的操作。用"u"和CTRL-R你可以找回任何一个操作状态。...指定的数字要紧挨在它所要修饰的命令前面。 8.退出 要退出Vim,用命令"ZZ"。该命令保存当前文件并退出Vim。 9.放弃编辑 丢弃所有的修改并退出,用命令":q!“。用”:e!"..."0"命令则总是把光标移动到当前行的第一个字符上。 " “0"命令却不能接受类似这样的计数,命令”^"前加上一个计数也没有任何效果。...实际上,任何退出文件编辑的命令":quit"和"ZZ"都会关闭窗口,但是用":close"可以阻止你关闭最后一个Vim,以免以意外地整个关闭了Vim。

    1.7K31

    vim常用命令总结

    4.撤销   如果你误删了过多的内容。显然你可以再输入一遍,但是命令“u” 更简便,它可以撤消上一次的操作。 5.重做   如果你撤消了多次,你还可以用CTRL-R(重做)来反转撤消的动作。...换句话说,它是对撤消的撤消。撤消命令还有另一种形式,“U”命令,它一次撤消对一行的全部操作。第二次使用该命令则会撤消前一个“U”的操作。用“u”和CTRL-R你可以找回任何一个操作状态。...指定的数字要紧挨在它所要修饰的命令前面。 8.退出   要退出Vim,用命令“ZZ”。该命令保存当前文件并退出Vim。 9.放弃编辑   丢弃所有的修改并退出,用命令“:q!”。用“:e!”...“0”命令却不能接受类似这样的计数,命令“^”前加上一个计数也没有任何效果。 12.移动到指定字符上   命令“fx”在当前行上查找下一个字符x(向右方向),可以带一个命令计数“F”命令向左方向搜索。...实际上,任何退出文件编辑的命令“:quit”和“ZZ”都会关闭窗口,但是用“:close”可以阻止你关闭最后一个Vim,以免以意外地整个关闭了Vim。

    15.6K20

    systemctl命令

    ,如果使用任何锁,关机和睡眠状态请求通常会失败无论是否具有特权,并打印活动锁的列表,但是如果指定了--ignore inhibitors,则会忽略锁而不打印,并且无论如何都会尝试该操作,可能需要额外的权限...具有相同的即时效果,但是由于后者在重新启动时丢失,因此更改也会丢失,类似地,当与set属性一起使用时,仅临时进行更改,以便在下次重新启动时丢失更改。...link FILENAME...: 将不在单位文件搜索路径中的单位文件链接到单位文件搜索路径,这需要到单位文件的绝对路径,使用disable可以撤消此操作的效果,此命令的效果是,单位文件可用于start...,并且将所有文件系统卸载或以只读方式装载,然后立即停止系统,如果两次指定--force,将立即执行该操作,而不会终止任何进程或卸载任何文件系统,这可能会导致数据丢失。...,但是将终止所有进程,并且将所有文件系统卸载或以只读方式装载,然后立即重新引导,如果两次指定--force,将立即执行该操作,而不会终止任何进程或卸载任何文件系统,这可能会导致数据丢失,如果给出了可选参数

    1.7K20
    领券