为什么从shell脚本执行时输出会有所不同?

时间:2014-01-11 20:48:24

标签: linux bash shell

根据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

为什么我不能手动调用我的函数来获得相同的输出?

1 个答案:

答案 0 :(得分:5)

因为当不使用sudo时,$SUDO_USER未设置,并且您获得getent passwd的输出而没有进一步的参数,其中列出了所有用户。 cut然后提取主目录部分。

在未使用$SUDO_USER运行时,将$USER替换为sudo

请注意,在这两种情况下都应使用getent passwd ${SUDO_USER:-$USER}