我有一个bash脚本,该脚本仅应在被获取时使用。
我想在发生任何错误时自动从中返回,类似于set -e
所做的。
但是,设置set -e
对我不起作用,因为它也会退出用户外壳。
现在,我正在为每个命令像command || return 1
一样手动返回。
答案 0 :(得分:0)
您也可以使用command || true
或command || return
。
如果您的要求有所不同,请更精确地更新。
答案 1 :(得分:0)
您可以使用trap
。例如:
// foo.sh
function func() {
trap 'if [ $? -ne 0 ]; then echo "Trapped!"; return ; fi' DEBUG
echo 'foo'
find -name "foo" . 2> /dev/null
echo 'bar'
}
func
两个音符。首先,trap
必须位于所示函数内。如果只是在脚本中,它将无法正常工作。
两个,有一个明显的限制。即使将返回值设置为陷阱(例如return 1
),尽管func
在错误的find
命令之后仍然存在,但$?
仍然为零。我不确定是否可以解决此问题,因此,如果保留失败命令的退出值很重要,这可能行不通。
例如,如果您有:
func
func_return=$?
echo "return value is: $func_return"
func_return
将始终为零。我一直在尝试获取失败命令的退出值以传递出函数陷阱并进入函数退出值,但是还没有找到解决方法。
如果需要保留返回值,则可以在调试陷阱中更新全局变量。
答案 2 :(得分:0)
如果我很了解,您可以在每个函数中本地设置-e。
{
"took" : 27,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 1.4261419,
"hits" : [
{
"_index" : "office",
"_type" : "doc",
"_id" : "o004",
"_score" : 1.4261419,
"_source" : {
"name" : "Bob",
"title" : "Awesome Title",
"description" : "Finance Operations"
}
}
]
}
}