(可能是愚蠢的)AppleScript 问题:我有一个简单的 OSAScript(通过 Jamf 策略从 bash 脚本函数运行),它为控制台用户设置了一些 Finder 侧边栏选项。它运行良好,但我注意到最后一行总是在我的 Jamf 日志中得到回显 - 但在终端本地运行时不会得到回显)。
这是 Jamf 的东西、shell 的东西还是 AppleScript 的东西?
示例代码(为简单起见被截断):
function configure_sidebar() {
echo "Configuring Finder Sidebar settings for console user..."
sudo -u "$CONSOLE_USER_NAME" osascript -e '
activate application "Finder"
tell application "System Events"
tell process "Finder"
delay 1.0
select menu bar 1
click menu bar item "Finder" of menu bar 1
delay 0.5
click menu 1 of menu bar item "Finder" of menu bar 1
click menu item "Settings…" of menu 1 of menu bar item "Finder" of menu bar 1
repeat until exists window "Finder Settings"
end repeat
click button "Sidebar" of toolbar 1 of window "Finder Settings"
if (value of checkbox 1 of scroll area 1 of window "Finder Settings" as boolean) then
click checkbox 1 of scroll area 1 of window "Finder Settings"
end if
if (value of checkbox 2 of scroll area 1 of window "Finder Settings" as boolean) then
click checkbox 2 of scroll area 1 of window "Finder Settings"
end if
if not (value of checkbox 3 of scroll area 1 of window "Finder Settings" as boolean) then
click checkbox 3 of scroll area 1 of window "Finder Settings"
end if
end tell
end tell
'
}
脚本运行良好,但我的 Jamf 日志在最后一行回显以下内容:
“窗口 Finder 滚动区域 1 的复选框 3 应用程序进程 Finder 设置”
(不管最后一个命令是什么,它总是会得到回显,就好像我没有正确关闭 OSAScript,或者它不喜欢嵌套在函数中一样)。
result”返回。复选框 3 很可能有效并按照您所描述的方式返回,然后向上传递到要记录的链。
这段代码应该演示result 的工作原理。它假定 Finder 首选项已打开并且侧边栏选项卡处于活动状态。
如果第一个复选框被选中,那么脚本将取消选中该框并生成一个结果。如果未选中,则它将不执行任何操作,因此不会生成结果。
activate application "Finder"
tell application "System Events"
tell process "Finder"
set wfp to window "Finder Preferences"
if (value of checkbox 1 of wfp as boolean) then -- if checked…
perform action "AXPress" of checkbox "All My Files" of wfp
end if
--> action "AXPress" of checkbox "All My Files" of window "Finder Preferences" of application process "Finder" of application "System Events"
end tell
end tell
您可以在 Applescript 语言指南中阅读有关全局常量的信息,但这是相关部分:
执行语句时,AppleScript 会将结果值(如果有)存储在预定义属性所以在这种情况下,复选框的初始状态决定是否有结果要记录。我应该补充一点,
result
中。该值将保留在那里,直到执行另一个生成值的语句为止。在执行产生结果的语句之前,result
的值是未定义的。您可以通过查看脚本窗口的结果窗格来检查脚本编辑器中的结果。
结果也将出现在脚本编辑器的日志窗口中。