首页
学习
活动
专区
工具
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 提供了一种快速简单错误退出机制,适合那些希望在命令失败立即停止脚本场景。

12010

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.5K10
  • 编写可靠 bash 脚本一些技巧

    0. set -x -e -u -o pipefail 在写脚本时,在一开始(Shebang 之后)加上下面这一句,或者它缩略版,能避免很多问题,更重要是能让很多隐藏问题暴露出来: set -xeuo...正式运行脚本也可以不加。 -e :遇到一个命令失败(返回码非零)时,立即退出bash 跟其它脚本语言最大不同点之一,应该就是遇到异常时继续运行下一条命令。这在很多时候遇到意想不到问题。...加上 -ebash 在遇到一个命令失败时,立即退出如果有时确实需要忽略个别命令返回码,可以用 || 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.2K30

    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 默认忽略它: ❯

    92120

    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

    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.4K20

    Shell 编程(1)

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

    1K11

    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 “撤消”跟踪此文件中更改?

    20410

    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。

    79170

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

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

    20310

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

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

    32610

    教你写出健壮可靠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。

    1K31

    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.2K20

    systemctl命令

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

    1.6K20

    vi与vim区别以及常用命令

    一、vi与vim区别 1、多级撤消 在vi编辑器中,按u只能撤消上次命令,而在vim里可以无限制撤消。...在该模式下,用户可以输入各种合法vi命令,用于管理自己文档。此时从键盘上输入任何字符都被当做编辑命令来解释,若输入字符是合法Vi命令,则vi在接受用户命令之后完成相应动作。...但需注意是,所输入命令并不在屏幕上显示出来。若输入字符不是Vi合法命令,vi响铃报警。...在该模式下,用户输入任何字符都被vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令行模式下,按”ESC”键即可。...7、替换字符 r:替换单个字符(按完r在按你要替换字符即可) R:替换多个字符(从你要替换位置开始替换,直至你退出正常模式) 8、撤销编辑操作:u u:撤消前一次编辑操作; #u:直接撤消最近

    1.7K20

    Shell脚本

    /bin/bash,它指定了执行脚本解释器,通常是 bash。执行脚本时,内核读取 shebang,并使用该解释器执行脚本。...dic2[@]}doecho $i: ${dic2[$i]}done13 Set 选项set 命令可以修改或显示 shell 选项值。如果不带任何参数,将列出所有 shell 变量及值。...set -x 类似于调试模式,先打印正在执行命令,然后显示命令输出结果。set -e 当出现非零退出代码时,立即退出脚本。在使用管道命令时,例如 sdfdsf | echo 'vish'。...由于该行执行最后一条命令是 echo,而 echo 返回退出代码为零,因此整行命令被认为是成功,但之前命令 sdsds 将返回非零代码,这是错误。要解决这个问题,我们可以使用下面的设置选项。...set -o pipefail 为了克服上述管道命令错误,可以使用 set -o pipefail 选项,它会捕获并立即停止脚本。因此,每条命令都应返回零退出代码。否则,脚本将失败

    17310
    领券