我有一个功能
function f() {
command 1
command 2
command 3
command 4
}
我想函数f()以某种方式告诉我如果4个命令中的任何一个失败就会出错。
我也不想set -e
。我想要运行四个命令,即使一个命令失败。
我该怎么做?对不起新手问题 - 我是新手来编写脚本。
答案 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