我有一个使用2个不同参数调用两次的函数。该函数执行一些检查,如果检查失败,则退出执行。如果检查成功,则继续执行。但是,就我而言,执行不会退出,它会继续第二次调用该函数。
我每次都调用该函数并将返回的值存储在变量中。从我了解的谷歌和stackoverflow的答案来看,问题似乎是这样的事实,当我调用将其存储在变量中的函数时,它正在子外壳中运行,而“退出”只是退出了subshell,而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"}
我无法设置正确的语法。.请提出建议。
答案 0 :(得分:1)
使用exit
,当前过程结束。您正在以$(check_profile $colorSpaceProfileName)
的形式调用函数,这意味着它们会运行到自己的进程中,因此函数内部的退出只会离开该进程。
有两种解决方法:
不要以这种方式收集函数的输出。将它们收集在函数内部,并将它们存储到变量中,然后可以在调用方进行检索。
安排函数根据调用者是否应该退出来设置退出代码,并在调用方评估函数的退出代码,即:
colorSpaceCheckResult=$(check_profile $colorSpaceProfileName)
(( $? == 2 )) && exit