我有一個腳本,可以作爲根(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。
?
我有一個腳本,可以作爲根(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。
?
爲什麼不使用echo $HOME
(並且只有在失敗時才使用一些更花哨的東西)。
你最好打賭IMO,是調用POSIX API來檢索它。 (如果您知道/ etc/passwd持有用戶,則可以使用grep-cut或sed或awk來檢索它,但這不適用於基於NIS的系統或許多其他集中式用戶管理設置。)當然,你在殼,所以你需要一些方法來獲得它。幸運的是,這並不難:
perl -MUser::pwent -e 'print getpw($<)->dir'
這不是高爾夫球,它比它需要更長的時間才能使它有點可讀。理解比perl -e 'print ((getpwuid($>))[7])'
更容易:-)
你爲什麼關心eval? – shellter