shell 命令set -e的作用

目录

示例1

示例2

示例3 在sh脚本文件里调用set -e,效果与示例1,2相同

set -e的作用范围

示例4

示例5


根据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,效果是一样的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值