2011-11-02 42 views
0

我有一個腳本,可以作爲根(sudo ./script.sh),如果是這樣,我需要訪問根的$ HOME。

我既可以做以下的:

#!/bin/sh 
ThisUser=$(id -u -n) 
REALHOME="~$ThisUser" 
eval "cd $REALHOME" 

sudo -H script.sh

#!/bin/sh 
cd $HOME 

有沒有一個解決方案,既
一個。不需要'eval'
b。不需要告訴用戶使用sudo -H。

+1

你爲什麼關心eval? – shellter

回答

0

爲什麼不使用echo $HOME(並且只有在失敗時才使用一些更花哨的東西)。

0

你最好打賭IMO,是調用POSIX API來檢索它。 (如果您知道/ etc/passwd持有用戶,則可以使用grep-cut或sed或awk來檢索它,但這不適用於基於NIS的系統或許多其他集中式用戶管理設置。)當然,你在殼,所以你需要一些方法來獲得它。幸運的是,這並不難:

perl -MUser::pwent -e 'print getpw($<)->dir' 

這不是高爾夫球,它比它需要更長的時間才能使它有點可讀。理解比perl -e 'print ((getpwuid($>))[7])'更容易:-)

相關問題