根据this帖子,我从命令行运行:
USER_HOME=$(getent passwd $SUDO_USER | cut -d: -f6)
并获得以下输出:
/root
/usr/sbin
/bin
/dev
/bin
/usr/games
/var/cache/man
/var/spool/lpd
/var/mail
/var/spool/news
/var/spool/uucp
/bin
/var/www
/var/backups
/var/list
/var/run/ircd
/var/lib/gnats
/nonexistent
/var/lib/libuuid
/home/user
/var/run/vboxadd
/var/lib/puppet
/var/run/sshd
当我在脚本中运行它时(作为sudo
,这是整个事情的重点 - 作为sudo,~
扩展为/root
):
USER_HOME=$(getent passwd $SUDO_USER | cut -d: -f6)
echo $USER_HOME
我得到正确的路径/home/user
。
为什么我不能手动调用我的函数来获得相同的输出?
答案 0 :(得分:5)
因为当不使用sudo
时,$SUDO_USER
未设置,并且您获得getent passwd
的输出而没有进一步的参数,其中列出了所有用户。 cut
然后提取主目录部分。
在未使用$SUDO_USER
运行时,将$USER
替换为sudo
。
请注意,在这两种情况下都应使用getent passwd ${SUDO_USER:-$USER}
。