加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash-set -e和短期测试

发布时间:2020-12-15 19:07:20 所属栏目:安全 来源:网络整理
导读:当我是新的shell脚本,我使用了很多简短的测试,而不是if语句,如false真正。 后来我学会了使用set -e,发现我的脚本由于某种原因而死亡,如果我用完整的if语句替换了短测试,它们会工作。现在,时间已经过去了,我仍然使用完整的if语句。 最有趣的是,如果
当我是新的shell脚本,我使用了很多简短的测试,而不是if语句,如false&&真正。

后来我学会了使用set -e,发现我的脚本由于某种原因而死亡,如果我用完整的if语句替换了短测试,它们会工作。现在,时间已经过去了,我仍然使用完整的if语句。

最有趣的是,如果我打开一个交互式shell并执行以下操作:

set -e
false && true
echo $?

它返回1但是shell不会死!

我看到我一直在浪费太多的代码行。任何人都可以向我解释如何安全地使用set -e与短测试,例如。没有脚本死吗?

Single UNIX Specification描述了set -e的效果:

When this option is on,if a simple command fails for any of the reasons listed in Consequences of Shell Errors or returns an exit status value >0,and is not part of the compound list following a while,until,or if keyword,and is not a part of an AND or OR list,and is not a pipeline preceded by the ! reserved word,then the shell shall immediately exit.

如您所见,AND列表中的失败命令不会使shell退出。

使用set -e

使用set -e启动shell脚本被认为是最佳实践,因为如果出现某些错误,通常会更安全地中止脚本。如果一个命令可能无害化,我通常会追加||真的

这是一个简单的例子:

#!/bin/sh
set -e

# [...]
# remove old backup files; do not fail if none exist
rm *~ *.bak || true

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读