另外,这些变量是否总是匹配当前登录的用户名(在我的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为它运行(除极不寻常的情况,你明确地将其配置为以其他方式表现)的命令。比较到。root
whoami
sudo
sudo id -u
sudo id -ru
man
页面,whoami
报告与您的有效用户ID关联的名称。这意味着如果您正在使用sudo
或运行setuid可执行文件,它将返回不同的结果。如果已sudo
设置,请尝试sudo whoami
例如。