我正在尝试编写一个 shell 函数,如果其中发生错误(特别是当被调用的命令返回错误时),它将退出该函数(而不是脚本),并将错误代码返回给调用函数。
例如,对于脚本:
#!/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 也不错。
最佳答案
这是你想要的吗? (仅限 Bash。)
#!/bin/bash
f() {
echo 'function f'
g
echo "g returned $?"
}
g() {
trap 'return 1' ERR
echo 'function g'
false
echo "boo"
}
f
关于linux - 尝试使用 trap 跳出 shell 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38772496/