我想写一些函数abort
来做一些工作人员然后中止调用函数。有可能吗?
目标是模仿set -e
但在功能级别 - 从函数返回而不是退出整个脚本。所以我需要在ERR
上设置陷阱来杀死函数。
有可能吗?
答案 0 :(得分:4)
你可以利用子贝壳来让他们“击中”"当程序退出非零时。
用括号括起函数调用以在子shell中执行它。像这样的东西
#!/bin/bash
function abort {
set -e
exit 1
}
function f {
echo "Hello"
abort
echo "Will not be called"
}
(f)
echo "After f"
如果您希望f
始终是"可以中止",请将整个定义括在括号中,然后每次调用时都不需要它们:
function f {(
echo "Hello"
abort
echo "Will not be called"
)}
答案 1 :(得分:0)
听起来你只想在RETURN上找一个陷阱:
$ cat a.sh
#!/bin/bash
cleanup() {
echo 'foo invoked cleanup'
}
foo() {
trap cleanup return
test "$1" = fail && return 3 # instead of abort
trap : return # clear the trap to avoid calling cleanup
return 0
}
foo
echo foo returned $?
foo fail
echo foo returned $?
$ ./a.sh
foo returned 0
foo invoked cleanup
foo returned 3