shell脚本中如果设置set -e之后可能存在的一些问题
set -e 说明:
如果一个简单的命令以非零的退出值退出,这将导致shell立即退出。简单命令是不属于if、while或until测 试的任何命令,或者是&;&;或列表的一部分。
如果shell脚本中设置此环境时,脚本中任何一个非0退出的命令都会导致脚本终止。如果此终止行为不是开发者的期望行为的话,那么就比较难以发现。
举例:
set -e
command | grep -r ${str}
当上述命令执行结果的字串不为0时(grep搜索存在),命令的退出值为0。
而当上述命令执行结果的字串为空时(grep搜索不存在),命令的退出值为1。
后者会导致shell脚本的终止。
要避免上述问题有如下几种方式:
1、去掉set -e声明,但是此行为是全局的
2、针对特定命令修改
command | grep -r ${str} | tee a.log
注:tee a.log 可以改变命令的执行后的返回值,而不改变命令本身的执行结果。