我正在运行一个通过终端运行shellcript的applscript。
我希望能够使用“使用管理员权限执行shell脚本”,但终端以root身份运行我的脚本,而不是常规用户(管理员)。
我想以root身份运行的原因(除了显而易见的原因)是我使用〜符号所以任何用户都可以登录并在本地运行脚本(我将日志文件直接写入用户的桌面)
我想以root身份运行的另一个原因是因为我在shell脚本中使用ViseX安装程序,因为root用户运行不正常。
这是我使用的AppleScript(感谢regulus6633 for the applecirpt):
set theFile to "myscriptname.sh"
-- launch the application with admin privileges and get the pid of it
set thePID to (do shell script "/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal > /dev/null 2>&1 & echo $!" with administrator privileges) as integer
-- get the bundle identifier of that pid so we can do something with the application
delay 0.2
tell application "System Events"
set theProcess to first process whose unix id is thePID
set bi to bundle identifier of theProcess
end tell
-- runs the Terminal with the shellscript
set theFileAlias to (POSIX file theFile) as alias
tell application id bi
activate
open theFileAlias
end tell
答案 0 :(得分:3)
不幸的是,with administrator privileges
表示“以root身份”。在Mac OS X中,与大多数其他Unix派生的操作系统一样,无法以非root用户身份获得管理员权限。当您通过sudo
运行某些内容时,它只是以root身份运行命令。
但是,您不需要以root身份运行整个终端窗口。只需以普通用户身份启动终端并告诉它(通过do script
块内的tell application "Terminal"
)以root身份执行所需的命令。我不知道do script
是否接受with administrator privileges
,但如果没有,您可以始终在前面贴上sudo
。
答案 1 :(得分:0)
我找到了接下来取得成功的方法:
do shell script "sudo -H -u virtustilus /bin/bash -c \"/bin/bash -c '. ~/.bash_profile; /Users/vis/my_big_script.sh > /Users/vis/someLog.log 2>&1'\"" with administrator privileges
这是怎么回事:
. ~/.bash_profile
个环境变量(如PATH)。它有效(我现在在automator应用程序中使用它。)