目录
示例3 在sh脚本文件里调用set -e,效果与示例1,2相同
根据shell 脚本中set -e选项作用范围_fc34235的博客-CSDN博客所说,当一条shell命令完成后,会返回一个退出状态码(英文称为exit status)。假如命令正常运行,则返回0,否则返回一个非0的数。
示例1
假如在命令行窗口上先后执行下面两行命令,则命令行窗口直接退出。
#当前文件夹下没有任何cpp文件
set -e
ls c.cpp; echo $?
示例2
现在把set -e改为set +e
可见,echo 返回了ls c.cpp的退出状态码2。
示例3 在sh脚本文件里调用set -e,效果与示例1,2相同
对比:
set -e的作用范围
假如把set -e放到sh脚本文件(称为脚本A)里面,然后在脚本A里面调用脚本B,脚本B的行为受不受脚本A设置的影响呢?
示例4
从直觉上说,脚本B中假如出现某命令的退出状态码!=0,则整个脚本B都会停下来。但是实际不是这样。
a.sh
#!/bin/bash
set -e
./b.sh
echo a
b.sh
#!/bin/bash
ls c.cpp
echo b
结果可见,尽管a.sh设置了set -e,但是b.sh的echo b照常运行,并不受ls c.cpp返回非零值的影响。
示例5
把a.sh改一下,./b.sh改为. ./b.sh
#!/bin/bash
set -e
. ./b.sh
echo a
效果:
可见,当ls 返回的状态码为非零值后,.sh停止执行。原因是. ./b.sh将b.sh放到了和a.sh相同的进程里面。而set -e只在a.sh所在的进程起作用,所以示例4不起作用,但是示例5起作用。
你也可以用source ./b.sh代替. ./b.sh,效果是一样的。