Bash函数来自另一个脚本错误处理程序

时间:2016-03-05 20:35:31

标签: bash

我有以下情况。脚本源脚本B.脚本B有一个名为check的函数,它不会对任何已执行的命令进行错误处理。

check () {
  cmd1
  cmd2
  cmd3
  ...
}

我的目标是从A调用函数检查,如果任何cmd *失败则退出。

我试过A"检查|| 1号出口"但如果cmd2失败并且cmd3成功,则A不会退出。 set -e也不适合我。

感谢任何帮助。

2 个答案:

答案 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”就可以了。