bash函数返回状态

时间:2015-10-26 03:24:35

标签: linux bash shell

我有一个功能

function f() {
  command 1
  command 2
  command 3
  command 4
}

我想函数f()以某种方式告诉我如果4个命令中的任何一个失败就会出错。

我也不想set -e。我想要运行四个命令,即使一个命令失败。

我该怎么做?对不起新手问题 - 我是新手来编写脚本。

3 个答案:

答案 0 :(得分:4)

如果我理解你的要求是正确的,你可以这样做:

f() {
  err=""
  command 1 || err=${err}1
  command 2 || err=${err}2
  command 3 || err=${err}3
  command 4 || err=${err}4
  # do something with $err to report the error
}

当然,如果您需要做的只是打印错误消息,而不是使用变量,您可以简单地在||之后放置echo命令:

f() {
  command 1 || echo "command 1 failed" >&2
  command 2 || echo "command 2 failed" >&2
  command 3 || echo "command 3 failed" >&2
  command 4 || echo "command 4 failed" >&2
}

答案 1 :(得分:2)

利用"$@"并编写更高阶函数:

table1.fid

然后:

function warner () { "$@" || echo "Error when executing '$@'" >&2; }

测试:

warner command 1
warner command 2
warner command 3
warner command 4

作为@ user1261959 found out,这与this answer中的方法相同。

答案 2 :(得分:0)

您可以通过检查变量$?来检查运行后的任何命令的退出标志。如果它返回0,通常一切都很顺利,否则意味着发生了错误。您可以使用关键字return

使函数向调用者返回一个标记