2011-01-25 163 views
0

我正在運行一個通過終端運行shell腳本的applscript。如何「以管理員權限執行shell腳本」作爲普通用戶而不是root?

我希望能夠使用「使用管理員權限執行shell腳本」,但終端以root身份運行我的腳本,而不是以普通用戶身份(這是Admin)。

我想以root身份運行(除了顯而易見的原因)的原因是我使用〜符號,因此任何用戶都可以在本地登錄並運行腳本(我直接向用戶桌面寫入日誌文件)。

我想以root身份運行的另一個原因是因爲我在我的shell腳本中使用ViseX安裝程序,而該腳本無法以root身份運行。

這是我使用(感謝regulus6633爲applescirpt)的AppleScript的:

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 
+1

爲什麼你必須在終端內運行腳本?你可以使用`do shell script`來執行腳本本身... – Yuji 2011-01-25 10:28:24

回答

3

不幸的是,with administrator privileges裝置 「爲根」。在Mac OS X中,與大多數其他Unix衍生操作系統一樣,無法以非root用戶的身份獲得管理員權限。當你通過sudo運行某個東西時,它只是以root身份運行該命令。

儘管如此,您並不需要以root身份運行整個終端窗口。只需以普通用戶身份啓動終端並通過(通過tell application "Terminal"塊內的do script)告訴它以僅以root身份執行所需的命令。我不知道是否do script接受with administrator privileges,但如果不是,你可以在前面貼上sudo

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 

這是怎麼回事在這裏:以 '根' 用戶(管理員權限)

  • 啓動shell腳本。
  • 將用戶更改爲「virtustilus」(我的主要用戶)並更改主目錄(標誌-H)。
  • 加載. ~/.bash_profile環境變量(如PATH)。
  • 啓動腳本my_big_script.sh,將所有輸出重定向到someLog.log文件。

它的工作原理(我現在在automator應用程序中使用它)。

相關問題