我有一个脚本,可以作为根(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