允许AppleScript脚本在不请求权限的情况下运行

时间:2015-10-02 13:08:25

标签: macos applescript

您好我在bash脚本中使用osascript tell process "Terminal"

显然需要获得许可才能这样做。它问我sudo,但我想signe去给这个脚本访问运行没有交互。你能这样做吗?

完整的osascript呼叫

osascript <<END
tell application "Terminal"
    activate
    tell application "System Events"
        tell process "Terminal"
            click menu item "Merge All Windows" of menu "Window" of menu bar 1
        end tell
    end tell
end tell
END

注意:这是在shell脚本中。

1 个答案:

答案 0 :(得分:7)

AppleScript正在做的是 GUI脚本的一个实例 - 以编程方式控制用户界面。

GUI脚本在这种情况下要求应用程序执行 - Terminal.app,假设您从那里运行Bash脚本 [1] - 在System Preferences > Security & Privacy > Privacy > Accessibility授权进行辅助访问

您第一次打开一个尚未授权的应用程序(或运行其中的脚本)时,您将被带到相关的“系统偏好设置”窗格 。您可以随后手动管理那里的应用程序。目前只有已检查的应用程序已获得授权。

一次性,每个应用程序,for-all-users配置步骤本身需要管理权限(通过交互式提示进行身份验证),但一旦申请获得授权, 正在运行这样的脚本不再需要管理员权限
sudo永远不会进入GUI脚本的图片。)

请参阅Apple's support article有关主题(在OS X 10.9时编写,但仍适用于10.11)。

警告:由于授权位于应用程序级别,授权Terminal.app然后允许任何脚本从中运行执行GUI脚本。

以编程方式授权应用程序的方式 - 未记录 - 通过sudo提供管理身份验证;例如,要授权Terminal.app,请使用以下内容 - 请注意,除非已经过身份验证,sudo仍然提示输入管理员密码:

  • OS X 10.11(El Capitan):

sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "REPLACE INTO access values ('kTCCServiceAccessibility', 'com.apple.Terminal', 0, 1, 1, NULL, NULL);"

  • OS X 10.10(约塞米蒂)和10.9(小牛队):

sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "REPLACE INTO access values ('kTCCServiceAccessibility', 'com.apple.Terminal', 0, 1, 1, NULL);"

有关背景信息,请参阅this answer(截至撰写本文时,需要更新El Capitan)。

据我所知,没有办法以预先授权辅助访问的方式签署单个应用程序/ applet。 (此外,签名的AppleScript小程序可能会通过自我修改使其手动授予的授权无效 - 请参阅上面链接的Apple支持文章。)

[1] 授权在 OS X应用程序*.app软件包)级别授予,因此执行GUI脚本的脚本需要运行脚本的应用程序被授权 - 而不是命令行程序,例如{/ 1}} 内部实际解释脚本的应用程序(即使错误消息可能 - 误导性地 - 暗示该程序;例如,osascript)。 功能