2011-11-02 73 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])'更容易:-)

相关问题