set -e做什么?


28

我找到了一个脚本,并且试图使其运行,它只是下载并安装Apache运行时库。第一行是set -e并且正在导致错误;怎么set -e办?

Answers:


22

这个内建函数是如此复杂,以至于它自己的部分。

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

-e选项

-e

如果管道(请参阅管道)可能由单个简单命令(请参阅简单命令),括号中包含的subshel​​l命令(请参阅命令分组)或由以下命令所包含的作为命令列表一部分执行的命令之一组成,请立即退出花括号(请参阅命令分组)返回非零状态。如果失败的命令紧随一段时间或直到关键字,if语句中的测试部分,&&或||中执行的任何命令的一部分之后,命令列表中的一部分,则外壳程序不会退出。列出最后一个&&或||之后的命令,管道中最后一个命令之外的任何命令,或者如果命令的返回状态用!反转。退出外壳之前,将执行ERR上的陷阱(如果已设置)。

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

资料来源:www.gnu.org

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

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

man bash 

在本节中:SHELL BUILTIN COMMANDS

或问题

help set 

以获得简短的帮助信息。


1
由于它是内置命令,因此如果要安装bash-doc,则需要help set完整的bash手册info bash
psusi

感谢您对@psusi的澄清。help set和/或是man bash的正确选择set
NickTux

12

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


2
感谢您的简单说明。我经常在Dockerfiles中看到set -xe,现在我知道原因了:)
ymakux
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.