您好我在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脚本中。
答案 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
仍然提示输入管理员密码:
sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "REPLACE INTO access values ('kTCCServiceAccessibility', 'com.apple.Terminal', 0, 1, 1, NULL, NULL);"
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
)。
功能