如果我的脚本中发生了一些错误(> 0而不是194),我想进行API调用并报告它。但是应该由trap触发的功能在退出1进行测试时不会执行。
我希望函数createIncidentOnErr得到执行。但是脚本会立即退出。
#!/bin/bash
set -e
function createIncidentOnErr (){
echo "some api call"
}
trap 'if [ $? -ne 194 ]; then createIncidentOnErr;' ERR
function checkOS (){
exit 1
}
checkOS
我也尝试了这种替代方法,并期望如果exit不为0则执行该替代方法。但是它也将在exit 0处执行。
#!/bin/bash
set -e
function createIncidentOnErr (){
echo 'exit because of errorcode '"$?"'. do some api call'
}
trap 'if [[ $? -ne 0 || $? -ne 194 ]]; then createIncidentOnErr; fi;' EXIT
function checkOS (){
exit 0
}
checkOS
这是上述代码的结果:
bash -x ./test.sh
+ set -e
+ trap 'if [[ $? -ne 0 || $? -ne 194 ]]; then createIncidentOnErr; fi;' EXIT
+ checkOS
+ exit 0
+ [[ 0 -ne 0 ]]
+ [[ 0 -ne 194 ]]
+ createIncidentOnErr
+ echo 'exit because of errorcode 0. do some api call'
exit because of errorcode 0. do some api call