bash - 退出表单 shell 脚本未按预期工作
问题描述
我有一个使用 2 个不同参数调用两次的函数。该函数执行一些检查并在检查失败时退出执行。如果检查成功,则继续执行。但是在我的情况下,执行没有退出,它会继续第二次调用该函数。
我每次都调用该函数并将返回的值存储在变量中。根据我通过google和stackoverflow上的答案了解到的情况,问题似乎是当我调用函数将其存储在变量中时,它在子shell中运行并且“exit”只是退出执行子shell,而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"}
我无法设置正确的语法..请建议..
解决方案
,exit
结束当前进程。您正在调用您的函数,即 ,$(check_profile $colorSpaceProfileName)
这意味着它们运行到自己的进程中,因此函数内部的退出仅离开该进程。
这里有两个解决方法:
不要以这种方式收集函数的输出。在函数内收集它们并将它们存储到一个变量中,然后您可以在调用方检索该变量。
安排函数设置退出代码,具体取决于调用者是否应该退出,并在调用方评估函数的退出代码,即:
colorSpaceCheckResult=$(check_profile $colorSpaceProfileName)
(( $? == 2 )) && exit
推荐阅读
- java - 为什么我的 Go 数组排序代码比 Java 慢得多?
- c# - windows认证和个人认证在一个项目中
- php - PHP 计算日期、小时和分钟时出错?
- linux - 重命名与目录同名的文件 - bash 脚本
- exception - aarch64 异常级别从 EL1 切换到 EL0
- ag-grid - AG-Grid - 如何动态增加行高?
- java - Websockets使用Too Tall Nate Java库与代码-1断开连接
- javascript - 如何在 amchrts 图例中应用水平对齐?
- vuetify.js - Vuetify - 底部对齐文本字段
- python-3.x - py2neo v4 与数据库中的 2 个现有节点创建关系