在bash脚本中,有什么用
set -e
?
我认为这与环境变量有关,但我以前从未遇到过
假设脚本下面的当前目录中没有名为trown的文件:
#!/bin/bash
# demonstrates set -e
# set -e means exit immediately if a command exited with a non zero status
set -e
ls trumpet #no such file so $? is non-zero, hence the script aborts here
# you still get ls: cannot access trumpet: No such file or directory
echo "some other stuff" # will never be executed.
您还可以将e
与x
选项相结合,例如set-ex
其中:
-x在执行时打印命令及其参数。
这可能有助于调试bash脚本。
参考:设置Manpage
man bash说
如果一个简单的命令(参见上面的SHELL GRAMMAR)以非零状态退出,则立即退出。如果失败的命令是命令列表的一部分,紧跟在一小时或直到关键字之后,是if语句中测试的一部分,是
如果您想避免测试bash脚本中每个命令的返回代码,这是获得“快速失败”行为的超级方便的方法。
引用帮助集
-e Exit immediately if a command exits with a non-zero status.
i、 e脚本或shell将在遇到任何以非0(失败)退出代码退出的命令时立即退出。
任何失败的命令都会导致shell立即退出。
例如:
打开终端并键入以下内容:
$ set -e
$ grep abcd <<< "abc"
当您在grep命令后按enter键时,shell就会退出,因为grep退出时的状态为非0,即它无法在文本abc中找到正则表达式
注意:要取消设置此行为,请使用set e。
我有一个bash脚本用于制作我的项目。我在脚本顶部设置了,以便在任何组件出现故障时中断执行。 其中一个命令会失败,但它失败是很自然的。我希望脚本表现为: 运行脚本。 到达并运行有问题的命令。 如果失败,不要中断执行。仅为此命令执行此操作。
问题内容: 我正在研究脚本从该脚本的Debian存档(.deb)文件解压缩之前执行的 preinst 文件的内容。 该脚本具有以下代码: 我的第一个查询是关于这一行的: 我认为脚本的其余部分非常简单:它检查Debian / Ubuntu软件包管理器是否正在执行安装操作。如果是,它将检查我的应用程序是否刚刚安装在系统上。如果已安装,脚本将显示消息 “ MyApplicationName已安装” 并结
我的第一个问题是关于行: 我认为脚本的其余部分非常简单:它检查Debian/Ubuntu包管理器是否正在执行安装操作。如果是,它会检查我的应用程序是否刚刚安装到系统上。如果有,脚本将打印消息“MyApplicationName is just installed”并结束(表示以“error”结束,不是吗?)。 如果用户正在要求Debian/Ubuntu包系统安装我的包,脚本也会删除两个目录。
出发地:https://github.com/brandon-rhodes/luca/blob/master/requirements.txt 最后一行是做什么的?
我偶然发现了这个代码。我一直在使用{}格式的箭头函数,这个()包装器是什么意思?
我有一个bash脚本,我想全局启用set-e。 但是,与其一直禁用它并重新启用它,我想知道是否有一种方法可以有时选择性地禁用错误处理。例如,从systemd运行的命令可以在前面加上一个减号来忽略错误。bash有等效的吗? e. g. 由于需要启用/禁用很多,我不想继续执行以下操作: