shell环境设置方法纪要
我们从下面这段脚本说起。
#!/usr/bin/env bash
set -e -x
source bosh-softlayer-tools/ci/tasks/utils.sh
check_param deploy_name
check_param data_center_name
check_param private_vlan_id
check_param public_vlan_id
deployment_dir="${PWD}/deployment"
mkdir -p $deployment_dir
首先是env和set命令。env命令可以打印环境变量,也可以用env来执行程序。这里就是使用env执行bash解决在不同的系统上找不到脚本解释器(bash)的兼容性问题。因为在不同的系统下,脚本解释器可能在不同的目录下。通过#!/usr/bin/env bash
能够让脚本能够在不同的系统上成功执行。
而set命令是shell内建的命令,无需去查询它的位置( in /bin
or /usr/bin
)。和env类似,set命令可以打印出shell变量。shell变量与环境变量的区别在于环境变量是能被子shell或者进程继承的变量,shell只能当前shell本地访问,并且shell变量包含着环境变量。而-e -x
参数的意思是:当执行错误时立即退出,并且当执行时先将执行路径打印以便调试。
-e Exit immediately if a command exits with a non-zero status.
-x Print command traces before executing command.
上图是在set -x
环境下的ls
命令的执行结果,能够将+ ls --color=auto -ln
打印出来。在这个模式下能将这些注释信息都打印出来。
source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。所以bosh-softlayer-tools/ci/tasks/utils.sh
里的定义的内容能够立即使用。比如check_param
函数能够坚持传入sh的参数是否存在。
最后两条命令就是工作目录的设置。