Linux set命令用于设置shell。
set指令能设置所使用shell的执行方式,可依照不同的需求来做设置。
set所有的参数说明
参考官网文档set
1 | -a 标示已修改的变量,以供输出至环境变量。 |
set -o
我们可以看到,在上述参数中,并没有列出 -o,因为上述参数都是布尔型的参数来确定是否开启相关功能,而 -o需要提供对应的参数。使用方法如下:
1 | set -o <option-name> # 其中 option-name 是系列预定义的命令选项,其中有些命令选项和开关参数是类似的,在此不进行罗列。开关参数未涉及的命令选项如下: |
set -e
先说说set -e,这个参数的含义是,当命令发生错误的时候,停止脚本的执行。这是一种替代 && 的相对优雅的解决方案。
比如一个shell种,我们需要有序执行一系列任务,如果其中一个任务失败,则直接推出。起始shell本身是不会监控中间任务的,我们可能会习惯于使用&&来实现这样的功能,比如:
1 | #!/bin/bash |
但是这样的写法会有几个问题,一方面是代码的可读性会非常差,示例只是简单的任务可能相对还好,但是有些单个任务带着参数可能都要上百个字符串甚至更多,而且一个shell中可能会涉及非常多任务,这样写代码可读性会非常差,使用"\"进行人工换行,也会极大的增加编码人员的思考了;另一方面这样的写法过程中,是不能进行代码注释的。
而使用 set -e 命令,可以设置脚本遇到错误就退出。
1 | #!/bin/bash |
set -x
说完了-e,继续说说-x。-x参数的作用,是把将要运行的命令用一个+标记之后显示出来。
还是拿上面这个脚本举个例子,这次加上-x:
1 | !/bin/bash |
运行后,会用 + 号标记并打印出来每行所执行的具体shell命令,如下:
1 | + echo 111 |
注意第一行和第三行前面那个+,这就是-x参数的作用。
注意点
shell 默认只能捕获 1255的错误码,所以当错误码大于255时,会有捕获问题,而例如python的错误码会存在大于255的情况,所以需要注意进行必要的错误码转换,将错误码转换为1255的范围。