2009-10-27 82 views
28

如果我使用sudo運行shell腳本,如何獲得正確的$ USER?

我將它們作爲Mac安裝包中的安裝後腳本運行,它們在那裏被自動sudo-ed,但我需要使用用戶名進行操作。

$ HOME是正確的,但。這種不雅的方法是從家鄉路徑中提取名字,但我想知道是否有一種自然的方式來做到這一點。

我不能影響腳本被調用的方式,因爲它是安裝程序中的自動調用。

回答

30

在我的系統上,變量$SUDO_USER設置爲調用者的用戶名。

您不應該直接從${HOME}變量中提取用戶名。它正在進行配置和未計算。要提取用戶名,您可以查看/etc/passwd文件,但這是非常依賴系統的,例如,有時您必須查看LDAP目錄或通過NIS傳播條目...

+1

對於那些在這裏登陸,因爲gnome-terminal放棄了對'logname'的支持,這似乎很好''(logname 2>/dev/null || echo $ SUDO_USER)''。也在MacOS上測試過。錯誤報告:https://bugzilla.gnome.org/show_bug.cgi?id = 747046 – tresf

9

SUDO_USER不可攜帶。它在Fedora 17上未設置。

$USER$UID變量在調用sudo時也是不可預測的。一些發行者報告了sudoer,另一些則報告了root用戶。

這絕不是完美的,但你可以使用test -w ~root && echo I have write access to ~root

15

您可以使用$(logname),即使您正在進行sudoing,它也會返回您的登錄名。

+5

未來的谷歌搜索引擎;這應該是公認的答案,它適用於OSX,Debian和Centos。 – Knetic

+2

@Knetic對於未來您和其他Google員工,它可能不會:https://bugzilla.gnome.org/show_bug.cgi?id=747046 – muru

+0

它在Ubuntu 16.04.1上返回sudo名稱LTS – Adnan