如何从源脚本中获取退出代码

M.R*_*M.R 1 bash shell exit-code

我有两个脚本主脚本和子脚本,我使用源脚本调用下脚本,如果未安装指定的包,那么它应该返回退出代码1。

如果我使用运行主脚本,bash main.sh我无法从主脚本获取 subScriptExitCode

主脚本

source "sub.sh"

subScriptExitCode=$?

log "subScript ExitCode: $subScriptExitCode"

if [ $subScriptExitCode -ne 0 ]; then
    exit $subScriptExitCode
fi
Run Code Online (Sandbox Code Playgroud)

子脚本

type -p <package>

subScriptExitCode=$?

if [ $subScriptExitCode -ne 0 ]; then
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

PTR*_*TRK 6

当获取文件时,不要使用exit,因为这将终止整个执行。相反,return在 sub.sh 中使用:

返回[n]

导致函数退出并返回 n 指定的返回值。如果在函数外部使用,但在 . (source) 命令,它会导致 shell 停止执行该脚本,并返回 n 或脚本内执行的最后一个命令的退出状态作为脚本的退出状态。如果在函数外部使用并且不是在 . 执行脚本期间使用,则返回状态为 false。

子目录

type -p <package>

subScriptExitCode="$?"

if [ "$subScriptExitCode" -ne 0 ]; then
    return 1
fi
Run Code Online (Sandbox Code Playgroud)