set -e 有什么作用?

spi*_*edd 31 bash

我找到了一个脚本,我试图让它运行,它只是下载并安装 Apache 运行时库。第一行是set -e,它导致了错误;做set -e什么?

Nic*_*Tux 26

这个内置函数非常复杂,值得拥有它自己的部分。

set 允许您更改 shell 选项的值和设置位置参数,或显示 shell 变量的名称和值。

-e选项

-e

如果管道(请参阅管道)可能包含单个简单命令(请参阅简单命令)、括在括号中的子 shell 命令(请参阅命令分组)或作为命令列表的一部分执行的命令之一,则立即退出大括号(请参阅命令分组)返回非零状态。如果失败的命令是紧跟在 while 或 until 关键字之后的命令列表的一部分、if 语句中测试的一部分、在 && 或 || 中执行的任何命令的一部分,则 shell 不会退出 列表除了最后一个 && 或 || 之后的命令,管道中除最后一个之外的任何命令,或者如果命令的返回状态正在用 ! 反转。如果设置了 ERR 上的陷阱,则会在 shell 退出之前执行。

该选项分别适用于shell环境和每个子shell环境(参见命令执行环境),并且可能导致子shell在执行子shell中的所有命令之前退出。

来源:www.gnu.org

由于@psusi 在下面的评论而进行了编辑。

此外,您可以阅读 bash 的手册页

man bash 
Run Code Online (Sandbox Code Playgroud)

在部分:SHELL BUILTIN COMMANDS

或发出

help set 
Run Code Online (Sandbox Code Playgroud)

获取简短的帮助信息。


小智 15

set -e 简而言之,当它位于 bash 脚本的顶部时,告诉脚本在脚本中的任何行失败时立即退出(手册中列出了一些例外情况。)[1]

作为调试选项,它经常与 set -x,即在执行前用“+”号打印每个展开的命令行。 [2]

更多信息请访问:

[1] https://www.peterbe.com/plog/set-ex

[2] http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html

  • 感谢您的简单解释。我经常在 Dockerfiles 中看到 set -xe,现在我知道原因了 :) (2认同)