如果我使用sudo運行shell腳本,如何獲得正確的$ USER?
我將它們作爲Mac安裝包中的安裝後腳本運行,它們在那裏被自動sudo-ed,但我需要使用用戶名進行操作。
$ HOME是正確的,但。這種不雅的方法是從家鄉路徑中提取名字,但我想知道是否有一種自然的方式來做到這一點。
我不能影響腳本被調用的方式,因爲它是安裝程序中的自動調用。
如果我使用sudo運行shell腳本,如何獲得正確的$ USER?
我將它們作爲Mac安裝包中的安裝後腳本運行,它們在那裏被自動sudo-ed,但我需要使用用戶名進行操作。
$ HOME是正確的,但。這種不雅的方法是從家鄉路徑中提取名字,但我想知道是否有一種自然的方式來做到這一點。
我不能影響腳本被調用的方式,因爲它是安裝程序中的自動調用。
在我的系統上,變量$SUDO_USER
設置爲調用者的用戶名。
您不應該直接從${HOME}
變量中提取用戶名。它正在進行配置和未計算。要提取用戶名,您可以查看/etc/passwd
文件,但這是非常依賴系統的,例如,有時您必須查看LDAP目錄或通過NIS傳播條目...
檢查變量SUDO_USER。
http://www.gratisoft.us/sudo/man/sudo.html#environment
另一種方式來獲得用戶是通過誰命令。有時候,當你不關心用戶是否已經啓動時,這很有用。
who -m | awk '{print $1;}'
SUDO_USER
不可攜帶。它在Fedora 17上未設置。
$USER
和$UID
變量在調用sudo時也是不可預測的。一些發行者報告了sudoer,另一些則報告了root用戶。
這絕不是完美的,但你可以使用test -w ~root && echo I have write access to ~root
。
對於那些在這裏登陸,因爲gnome-terminal放棄了對'logname'的支持,這似乎很好''(logname 2>/dev/null || echo $ SUDO_USER)''。也在MacOS上測試過。錯誤報告:https://bugzilla.gnome.org/show_bug.cgi?id = 747046 – tresf