另外,这些变量是否总是匹配当前登录的用户名(在我的Debian系统上是这样)?我可以假定它们在其他类Unix系统中可用吗?
我也很好奇为什么会使用whoami而不是仅仅读取这些变量中的任何一个。
USER并且USERNAME是普通的环境变量,这意味着,如果需要,可以将它们设置为任意值。只需键入USER=xyz。换句话说,即使这些变量存在,也不能保证它们的值与当前登录的用户名匹配。
guarantee,我的意思是默认情况下(即假设用户未更改它们)。
sudo whoami和sudo echo $USER
sudo echo $USER,外壳展开$USER,然后调用sudo。因此,当然不会产生与相同的输出whoami。像sudo whoami,sudo sh -c 'echo $USER'(通常)输出root。关于您对whoami使用EUID的评论,请注意即使使用UID sudo whoami也会输出。集两者 EUID和UID为它运行(除极不寻常的情况,你明确地将其配置为以其他方式表现)的命令。比较到。rootwhoamisudosudo id -usudo id -ru
man页面,whoami报告与您的有效用户ID关联的名称。这意味着如果您正在使用sudo或运行setuid可执行文件,它将返回不同的结果。如果已sudo设置,请尝试sudo whoami例如。