返回退出代码而不关闭shell

| 我想从另一个脚本中调用的BASH脚本返回退出代码,但也可以直接调用它。大致如下所示:
#!/bin/bash
dq2-get $1
if [ $? -ne 0 ]; then
  echo \"ERROR: ...\"
  # EXIT HERE
fi
# extract, do some stuff
# ...
现在,在第1行中,脚本应该退出并返回退出代码1。问题是 我不能使用
return
,因为当我忘记为脚本提供源代码而不是调用它时,return将不会退出,并且脚本的其余部分将被执行并将所有内容弄乱。 我不能使用
exit
,因为这会关闭外壳。 我不能使用技巧
kill -SIGINT $$
,因为这不允许返回退出代码。 有没有我忽略的可行选择?     
已邀请:
您可以使用
x\"${BASH_SOURCE[0]}\" == x\"$0\"
来测试脚本是源还是被调用(如果为源,则为false;如果被调用,则为true),然后分别使用
return
exit
。     
使用它代替退出或返回:
[ $PS1 ] && return || exit;
无论是否来源都有效。     
问题标题的答案(不像其他答案一样在正文中)是:   返回退出代码而不关闭外壳
(exit 33)
这样就设置了退出代码,而没有退出外壳程序(也没有源脚本)。 对于更复杂的退出问题(具有特定的退出代码),无论是执行还是获取:
#!/bin/bash
[ \"$BASH_SOURCE\" == \"$0\" ] &&
    echo \"This file is meant to be sourced, not executed\" && 
        exit 30

return 88
如果执行,将设置退出代码30(带有错误消息)。 如果有来源,则退出代码为88。 将退出执行或采购,而不会影响调用外壳。     
另一种选择是使用一个函数并将返回值放入其中,然后简单地提供脚本(源processStatus.sh)或调用脚本(./processStatus.sh)。例如,考虑processStatus.sh脚本,该脚本需要将值返回到stopProcess.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
    

要回复问题请先登录注册