有没有sudo -H可以让bash脚本知道正确的$ HOME?

时间:2011-11-02 14:55:00

标签: bash

我有一个可以用作root(sudo ./script.sh)的脚本,如果有的话,我需要访问root的$ HOME。

我可以做以下两件事:

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

sudo -H script.sh

#!/bin/sh
cd $HOME

是否存在两种解决方案 一个。不需要'eval'
湾不要求告诉用户使用sudo -H。

2 个答案:

答案 0 :(得分:0)

为什么不使用echo $HOME(只有当失败时,使用一些更奇特的东西)。

答案 1 :(得分:0)

最好的选择,IMO,是调用POSIX API来检索它。 (如果您知道/ etc / passwd拥有该用户,您可以使用grep-cut或sed或awk来检索它,但这不能移植到基于NIS的系统或许多其他集中式用户管理设置。)当然,你是贝壳,所以你需要一些方法来获得它。幸运的是,这并不太难:

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

这不是高尔夫球,它只是让它有点可读性所需的时间长。理解这比perl -e 'print ((getpwuid($>))[7])'更容易: - )