退出表单外壳脚本无法按预期运行

时间:2019-02-11 09:49:02

标签: bash

我有一个使用2个不同参数调用两次的函数。该函数执行一些检查,如果检查失败,则退出执行。如果检查成功,则继续执行。但是,就我而言,执行不会退出,它会继续第二次调用该函数。

我每次都调用该函数并将返回的值存储在变量中。从我了解的谷歌和stackoverflow的答案来看,问题似乎是这样的事实,当我调用将其存储在变量中的函数时,它正在子外壳中运行,而“退出”只是退出了subshel​​l,而shell脚本继续执行。我正在提供以下代码:

check_profile_path() {
    local profileToCheck=$1
    if [ -e "$pdfToolBoxPath/used_profiles/Check$profileToCheck.kfpx" ]; then
        return 0
    else
        outputArr[status]="failed"
        outputArr[message]="profile configuration path for $profileToCheck not found at specified path"
        exitCode=1

        end_execution
    fi
}

check_profile() {
    local profileName=$1
    check_profile_path $profileName

    local containedText=$($someApplicationPath $somePath/used_profiles/Check$profileName.kfpx $fileToCheck)

    echo "<<<<<<<<<< $profileName >>>>>>>>>>"
    echo "$containedText"
    echo ""
}

end_execution() {
    jsonResult=$(create_json)

    echo $jsonResult
    exit $exitCode
}

colorSpaceProfileName="ColorSpace"
resolutionProfileName="Resolution"

colorSpaceCheckResult=$(check_profile $colorSpaceProfileName)
echo "$colorSpaceCheckResult"
resolutionCheckResult=$(check_profile $resolutionProfileName)
echo "$resolutionCheckResult"

我从中收到的输出是:

{"status":"failed","message":"profile configuration path for ColorSpace not found at specified path"}
<<<<<<<<<< Resolution >>>>>>>>>>
ProcessID   8..........

我希望它只是:

{"status":"failed","message":"profile configuration path for ColorSpace not found at specified path"}

我无法设置正确的语法。.请提出建议。

1 个答案:

答案 0 :(得分:1)

使用exit,当前过程结束。您正在以$(check_profile $colorSpaceProfileName)的形式调用函数,这意味着它们会运行到自己的进程中,因此函数内部的退出只会离开该进程。

有两种解决方法:

  • 不要以这种方式收集函数的输出。将它们收集在函数内部,并将它们存储到变量中,然后可以在调用方进行检索。

  • 安排函数根据调用者是否应该退出来设置退出代码,并在调用方评估函数的退出代码,即:

    colorSpaceCheckResult=$(check_profile $colorSpaceProfileName)

    (( $? == 2 )) && exit
相关问题