如何一次返回两个功能?

时间:2017-12-24 01:56:01

标签: bash return

我想写一些函数abort来做一些工作人员然后中止调用函数。有可能吗?

目标是模仿set -e但在功能级别 - 从函数返回而不是退出整个脚本。所以我需要在ERR上设置陷阱来杀死函数。

有可能吗?

2 个答案:

答案 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