如何“以管理员权限执行shell脚本”作为普通用户而不是root用户?

时间:2011-01-25 08:44:58

标签: macos shell applescript

我正在运行一个通过终端运行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

2 个答案:

答案 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

这是怎么回事:

  • 使用“root”用户(管理员权限)启动shell脚本。
  • 将用户更改为“virtustilus”(我的主要用户)并更改主目录(flag -H)。
  • 加载. ~/.bash_profile个环境变量(如PATH)。
  • 启动脚本my_big_script.sh,将所有输出重定向到someLog.log文件。

它有效(我现在在automator应用程序中使用它。)