允许 AppleScript 脚本 运行 无需请求许可
Allow AppleScript script to run without asking for permission
您好,我在 bash 脚本中使用 osascript tell process "Terminal"
。
这样做显然需要获得许可。它要求我输入 sudo,但我想在不进行交互的情况下让这个脚本访问 运行。你能做到吗?
完整的 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 脚本中。
更新:Dominik Bucher 报告说下面的解决方案在 macOS High Sierra 及更高版本,似乎是设计使然。
您的 AppleScript 正在做的是 GUI 脚本 的实例 - 以编程方式控制用户界面。
GUI 脚本要求应用程序执行它 - Terminal.app
在这种情况下,假设您运行正在使用您的Bash 脚本从那里[1] - 在System Preferences > Security & Privacy > Privacy > Accessibility
.
中获得辅助访问授权
您第一次打开应用程序(或运行来自其中)尚未授权。您以后始终可以在那里手动管理应用程序。目前只有 checked 个应用程序获得授权。
这是针对所有用户的每个应用程序的一次性配置步骤,本身需要管理权限(身份验证via interactive prompt), 但是一旦应用程序被授权,运行ning 这样的脚本就不再需要管理员权限.
(sudo
从未涉及 GUI 脚本。)
参见 Apple's support article 主题(写于 OS X 10.9,但自 10.11 起仍然适用)。
警告:由于授权是在应用程序级别,授权Terminal.app
然后允许任何脚本运行从它执行GUI脚本。
有一种未记录的方法以编程方式授权应用程序,其中通过sudo
提供管理身份验证;例如,要授权 Terminal.app
,请使用以下内容 - 请注意,除非已经通过身份验证,否则 sudo
仍会 提示 输入管理员密码:
- OS X 10.11 (埃尔卡皮坦):
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 (Yosemite) 和 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 需要更新)。
据我所知,无法以预授权辅助访问的方式签署个人应用程序/小程序。
(此外,已签名的 AppleScript 小程序可能会使其 - 手动授予 - 通过自我修改的授权无效 - 请参阅上面链接的 Apple 支持文章。)
[1] 在 OS X 应用程序(*.app
捆绑包)级别授予授权,因此执行 GUI 脚本的脚本要求 应用程序 运行 授权脚本 - 而不是命令行程序,例如 osascript
inside 实际解释脚本的应用程序(即使错误消息可能 - 误导性地 - 暗示该程序;例如,osascript is not allowed assistive access
)。
您好,我在 bash 脚本中使用 osascript tell process "Terminal"
。
这样做显然需要获得许可。它要求我输入 sudo,但我想在不进行交互的情况下让这个脚本访问 运行。你能做到吗?
完整的 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 脚本中。
更新:Dominik Bucher 报告说下面的解决方案在 macOS High Sierra 及更高版本,似乎是设计使然。
您的 AppleScript 正在做的是 GUI 脚本 的实例 - 以编程方式控制用户界面。
GUI 脚本要求应用程序执行它 - Terminal.app
在这种情况下,假设您运行正在使用您的Bash 脚本从那里[1] - 在System Preferences > Security & Privacy > Privacy > Accessibility
.
您第一次打开应用程序(或运行来自其中)尚未授权。您以后始终可以在那里手动管理应用程序。目前只有 checked 个应用程序获得授权。
这是针对所有用户的每个应用程序的一次性配置步骤,本身需要管理权限(身份验证via interactive prompt), 但是一旦应用程序被授权,运行ning 这样的脚本就不再需要管理员权限.
(sudo
从未涉及 GUI 脚本。)
参见 Apple's support article 主题(写于 OS X 10.9,但自 10.11 起仍然适用)。
警告:由于授权是在应用程序级别,授权Terminal.app
然后允许任何脚本运行从它执行GUI脚本。
有一种未记录的方法以编程方式授权应用程序,其中通过sudo
提供管理身份验证;例如,要授权 Terminal.app
,请使用以下内容 - 请注意,除非已经通过身份验证,否则 sudo
仍会 提示 输入管理员密码:
- OS X 10.11 (埃尔卡皮坦):
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 (Yosemite) 和 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 需要更新)。
据我所知,无法以预授权辅助访问的方式签署个人应用程序/小程序。
(此外,已签名的 AppleScript 小程序可能会使其 - 手动授予 - 通过自我修改的授权无效 - 请参阅上面链接的 Apple 支持文章。)
[1] 在 OS X 应用程序(*.app
捆绑包)级别授予授权,因此执行 GUI 脚本的脚本要求 应用程序 运行 授权脚本 - 而不是命令行程序,例如 osascript
inside 实际解释脚本的应用程序(即使错误消息可能 - 误导性地 - 暗示该程序;例如,osascript is not allowed assistive access
)。