我在试图弄清楚如何遍历用于填充AppleScript对话框按钮标签的数组时遇到问题。
我目前有一个由13个对象组成的数组,这些对象是我们jamf实例的部门。一个AppleScript对话框最多可以分配3个按钮。因此,我尝试遍历数组一次一次显示2个选项,第三个按钮是“下一步”以转到下两个选项,依此类推。
我还想解决以下情况:如果用户必须一直到最后一个选项,它会相应地调整按钮,例如,如果这是多少个选项,则让最后一个对话框具有1个或2个按钮剩下。
我为数组设置了13个项目,然后尝试了while循环,并使用了嵌套的if语句来检查是否还有1或2个剩余选项,并删除多余的按钮。
departments=("Accounting" "Compliance" "Data Science" "DevOps" "Engineering" "Executive Team" "Human Resources" "Marketing" "Member Experience" "Member Experience Managers" "Product" "QA" "Risk" "Not Listed")
departmentsCount=${#departments[@]}
i=0
dpt=""
while [ "$dpt" != "Not Listed" ]
do
if [[ $((departmentsCount - $i)) -eq 0 ]]; then
a=$i
dpt=$(osascript -e 'Tell application "System Events" to display dialog "Please select your Department:" buttons {"'"${departments[$a]}"'"} default button 1' 2>/dev/null | sed 's/button returned://')
i=$i+2
elif [[ $((departmentsCount - $i)) -eq 1 ]]; then
a=$i
b=$(i+1)
dpt=$(osascript -e 'Tell application "System Events" to display dialog "Please select your Department:" buttons {"'"${departments[$a]}"'", "'"${departments[$b]}"'"} default button 2' 2>/dev/null | sed 's/button returned://')
echo "$dpt"
i=$i+2
else
a=$i
b=$i+1
dpt=$(osascript -e 'Tell application "System Events" to display dialog "Please select your Department:" buttons {"'"${departments[$a]}"'", "'"${departments[$b]}"'", "Next"} default button 3' 2>/dev/null | sed 's/button returned://')
i=$i+2
fi
done
现在,由于$ dpt从未设置为Other,我遇到了一个无限循环。我还没有弄清楚如果选择了Next以外的内容,如何退出循环。也许我需要更改正在使用的循环类型或使用变量的方式。
答案 0 :(得分:0)
我认为您对此使用了错误的方法。请尝试使用choose from list
对话框:
osascript -e 'tell application "System Events" to (choose from list {"Accounting", "Compliance", "Data Science", "DevOps", "Engineering", "Executive Team", "Human Resources", "Marketing", "Member Experience", "Member Experience Managers", "Product", "QA", "Risk", "Not Listed"} with prompt "Please select your Department:")'
这将为您的用户提供一个对话框,使他们可以一次从所有13个部门中进行选择。更用户友好,并避免了循环麻烦。