我有以下情况。脚本源脚本B.脚本B有一个名为check的函数,它不会对任何已执行的命令进行错误处理。
check () {
cmd1
cmd2
cmd3
...
}
我的目标是从A调用函数检查,如果任何cmd *失败则退出。
我试过A"检查|| 1号出口"但如果cmd2失败并且cmd3成功,则A不会退出。 set -e也不适合我。
感谢任何帮助。
答案 0 :(得分:2)
您可以尝试自定义退出功能。
使用fileA:
#!/bin/bash
source fileB
check
和fileB:
#!/bin/bash
declare -a exitcode
check() {
cmd1
cmd2
trap finish EXIT
}
cmd1() {
myexit 1
}
cmd2() {
myexit 0
}
myexit() {
exitcode+=$1
}
finish() {
[[ ${exitcode[*]} =~ 1 ]] && exit 1 || exit 0
}
然后:
$ ./fileA; echo $?
1
退出代码附加在finish()
函数退出时检查的数组中。
答案 1 :(得分:2)
我明白了。问题是如果我“设置-e”并调用函数“func || exit 1”,那么即使cmd1失败,func子命令也会继续。简单地称之为“func”就可以了。