如何让依赖$PATH的Apple Script以管理员权限运行应用
解决方案
问题根源分析
- 第一个脚本的PATH问题:
do shell script with administrator privileges会以root身份执行,root的$PATH环境变量和普通用户完全独立,所以即使你在普通用户下配置好了依赖应用的路径,root环境里依然找不到。 - 第二个脚本的权限需求:通过
Terminal执行命令时,继承的是当前用户的环境变量(所以PATH正常),但需要给目标命令加上管理员权限才能运行。
方法一:给Terminal中的命令添加sudo权限
如果要保留Terminal执行的方式,直接在命令前加上sudo,让它以管理员身份运行:
tell application "Terminal" -- 注:你写的"MyApplication"应该是"Terminal"的笔误 do script "sudo /Applications/MyApp.app/Contents/MacOS/myapp > /dev/null 2>&1 &" end tell
执行后Terminal会弹出密码输入框,输入管理员密码即可运行。如果不想显示Terminal窗口,可以添加隐藏设置:
tell application "Terminal" set visible to false do script "sudo /Applications/MyApp.app/Contents/MacOS/myapp > /dev/null 2>&1 &" -- 可选:运行后自动关闭Terminal delay 1 quit end tell
方法二:修复第一个脚本的PATH问题(更推荐)
直接在do shell script中传入当前用户的$PATH,让root环境使用和普通用户一致的路径配置,同时保留管理员权限:
-- 获取当前用户的PATH环境变量 set userPath to do shell script "echo $PATH" -- 将用户PATH传入root环境,执行目标命令 do shell script "PATH=" & quoted form of userPath & " /Applications/MyApp.app/Contents/MacOS/myapp > /dev/null 2>&1 &" with administrator privileges quit
这种方式不会弹出Terminal窗口,系统会自动弹出标准的管理员权限验证弹窗,同时解决了依赖应用的PATH问题。
内容的提问来源于stack exchange,提问作者Codename K
相关产品推荐
相关产品推荐

