为什么 `su` 不会改变 $USER?

为什么 `su` 不会改变 $USER?

我注意到了以下情况:

当我使用我的用户时,我的 ID 是 1000:

┌ sefo@tux ~
└ $ echo $EUID $USER
1000 sefo

当我运行su我的 ID 更改时但我的用户没有

┌ sefo@tux ~
└ $ echo $EUID $USER
0 sefo

最后,在su -我的 ID之后我的用户变更:

┌ root@tux ~
└ $ echo $EUID $USER
0 root

我很难理解的是为什么su我的用户没有改变。我确实相信这种行为背后有一些理由,但目前它对我来说似乎不一致。

有人可以澄清一下这种行为吗?

答案1

正如@luuk 正确指出的那样man su

为了向后兼容,su 默认不改变当前目录,只设置环境变量 HOME 和 SHELL(如果目标用户不是 root,则设置 USER 和 LOGNAME)

由于su目标是 root 用户,为了向后兼容,$USER(和$LOGNAME)被保留。

相关内容