![为什么 `su` 不会改变 $USER?](https://linux22.com/image/1208365/%E4%B8%BA%E4%BB%80%E4%B9%88%20%60su%60%20%E4%B8%8D%E4%BC%9A%E6%94%B9%E5%8F%98%20%24USER%EF%BC%9F.png)
我注意到了以下情况:
当我使用我的用户时,我的 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
)被保留。