试图使用陷阱来打破shell函数

时间:2016-08-04 16:12:54

标签: linux bash shell

我正在尝试编写一个shell函数,如果在其中发生错误(特别是当被调用的命令返回错误时)将退出函数(但不是脚本),并将错误代码返回给调用函数。 / p>

例如,对于脚本:

#!/bin/sh
on_error() {
    return 1
}

f() {
    echo 'function f'
    g
    echo "g returned $?"
}

g() {
    trap on_error ERR
    echo 'function g'
    false
    echo "boo"
}

f

我回来了:

$ ./cc
function f
function g
boo
g returned 0

当我希望回来时:

$ ./cc
function f
function g
g returned 1

我需要做些什么来获得这个?

如果我将on_error函数更改为退出1,如:

on_error() {
    return 1
}

然后我得到:

$ ./cc
function f
function g

表示整个脚本在命中'false'命令时退出。

虽然在这个例子中可以简单地检查g内部命令的错误代码并在其中一个失败时返回错误,但在我的实际情况中我想要一个测试函数来尝试复制一打或者从不同位置到不同目的地的更多文件,并在第一次失败时停止,以便我可以报告测试失败并继续下一个测试功能。

虽然我更喜欢/ bin / sh解决方案,但/ bin / bash也不错。

1 个答案:

答案 0 :(得分:1)

这是你想要的吗? (仅限Bash。)

#!/bin/bash

f() {
    echo 'function f'
    g
    echo "g returned $?"
}

g() {
    trap 'return 1' ERR
    echo 'function g'
    false
    echo "boo"
}

f