我想从另一个脚本中调用的BASH脚本返回退出代码,但也可以直接调用。它大致如下:
#!/bin/bash
dq2-get $1
if [ $? -ne 0 ]; then
echo "ERROR: ..."
# EXIT HERE
fi
# extract, do some stuff
# ...
现在就行了 EXIT HERE
脚本应退出并返回退出代码1.问题是
- 我不能用
return
,因为当我忘记输入脚本而不是调用它时,返回会 不 退出,脚本的其余部分将被执行并搞砸了。
- 我不能用
exit
,因为这会关闭shell。
- 我不能用漂亮的技巧
kill -SIGINT $$
,因为这不允许返回退出代码。
有没有可行的替代方案我忽略了?
您可以使用 x"${BASH_SOURCE[0]}" == x"$0"
测试脚本是否被采购或调用(如果是sourced则为false,如果调用则为true)和 return
要么 exit
因此。
使用此而不是退出或返回:
[ $PS1 ] && return || exit;
无论是否来源都可以。
另一种选择是使用一个函数并将返回值放入其中,然后简单地获取脚本(source processStatus.sh)或调用脚本(./processStatus.sh)。例如,考虑需要将值返回到stopProcess.sh脚本的processStatus.sh脚本,但也需要在不使用源的情况下单独调用命令行(仅包含相关部分)
例如:
function checkProcess {
if [ $1 -eq "50" ]
then
return 1
else
return 0
fi
}
checkProcess
和
source processStatus.sh $1
RET_VALUE=$?
if [ $RET_VALUE -ne "0" ]
then
exit 0
fi