Shell 脚本中 set -ex 命令的作用

刚刚学会了一个很实用的 shell 命令 set -ex,在这里分享一下。

稍有常识的人都能看出,这是 set 命令加上了 -e 和 -x 两个参数 (废话么这不是)。那么,我就把这两个参数拆开,分别说一下它在脚本中的用处。

set -e

先说说 set -e,这个参数的含义是,当命令发生错误的时候,停止脚本的执行。

通常来说,我们会习惯于使用 && 来实现这样的功能,比如:

1
2
3
#!/bin/bash

echo 1 && rm non-existent-file && echo 2
 

但是,写成一行呢,可读性有点差,分成多行的话,也得注意换行符 \ 和 && 号,我就有过好几次忘了加这俩东西,还是挺麻烦的是吧。

更麻烦的是,&& 连接的命令之间不能写注释,也就是说,下面这个示例是不能用的:

1
2
3
4
5
#!/bin/bash

echo 1 \
&& rm non-existent-file \ # which will fail
&& echo 2
 

运行之后会是这个德行:

1
2
3
4
5
6
7
8
1
rm: non-existent-file: No such file or directory
rm: #: No such file or directory
rm: which: No such file or directory
rm: will: No such file or directory
rm: fail: No such file or directory
./test1.sh: line 5: syntax error near unexpected token `&&'
./test1.sh: line 5: ` && echo 2'
 

现在,就可以写成下面这样了:

1
2
3
4
5
6
#!/bin/bash

set -e
echo 1
rm non-existent-file # which will fail
echo 2
 

猜猜最后输出里面会不会把 2 打印出来?

set -x

说完了 -e,继续说说 -x-x 参数的作用,是把将要运行的命令用一个 + 标记之后显示出来。

还是拿上面这个脚本举个例子,这次加上 -x

1
2
3
4
5
6
#!/bin/bash

set -ex
echo 1
rm non-existent-file # which will fail
echo 2
 

然后它的输出就变成了:

1
2
3
4
+ echo 1
1
+ rm non-existent-file
rm: non-existent-file: No such file or directory
 

注意第一行和第三行前面那个 +,这就是 -x 参数的作用。

One more thing……

需要注意,这条命令需要放到整个 shell 脚本的开头,才会起作用。毕竟用脑子想想就知道,这是俩开关,不论放在中间还是结尾,都不会起到预期的作用。

posted @   Oops!#  阅读(565)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
历史上的今天:
2018-12-11 使用Dockerfile文件构建基于centOS系统的nodejs镜像
2018-12-11 CentOS下nodejs最简单的安装方法
2018-12-11 yum安装nodejs 8
2017-12-11 wordpress配置固定链接nginx访问404问题解决方法
点击右上角即可分享
微信分享提示