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

如何使bash函数在任何错误上返回1

发布时间:2020-12-15 22:26:09 所属栏目:安全 来源:网络整理
导读:我有一个假的bash函数,如: has_error() { true echo "Ok..." false echo "Shouldn't be here!"} 当我运行此函数并检查错误状态时,我希望发生什么: has_error; echo $?Ok...1 但实际发生了什么: has_error; echo $?Ok...Shouldn't be here!0 问题是该函数
我有一个假的bash函数,如:

has_error() {
  true
  echo "Ok..."
  false
  echo "Shouldn't be here!"
}

当我运行此函数并检查错误状态时,我希望发生什么:

> has_error; echo $?
Ok...
1

但实际发生了什么:

> has_error; echo $?
Ok...
Shouldn't be here!
0

问题是该函数在抛出错误后继续执行,而且,我甚至无法检测到抛出了错误.我怎么能改变这个?我可以在函数的开头放置一个set -e,但是如果抛出错误,我的整个shell将终止.我想要的是简单地让它返回并将退出状态设置为1.我可以通过put&&和在命令之间,或者用||后缀每一行返回1,但这些都不是很优雅.这样做的正确方法是什么?

编辑:

似乎我不够清楚,因为很多回复似乎表明我实际上并不知道如何在bash中执行测试.正如我上面提到的,我知道我可以在我的函数中手动测试每个命令,并根据需要返回或处理错误.我也知道我可以设置-e并导致我的shell会话因错误而终止.但我要问的是:有没有办法让函数停止继续执行 – 没有明确的测试 – 如果该函数中的任何命令返回非零状态?

解决方法

如果您的函数不需要设置任何全局变量,则可以使用该函数创建一个子shell,其中使用了set -e.子shell将退出,而不是调用has_error的shell.

has_error () (    # "(",not "{"
  set -e
  true
  echo "Ok..."
  false
  echo "Shouldn't be here!"
)

(编辑:李大同)

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

    推荐文章
      热点阅读