以 root 身份运行但 $USER 返回普通用户?

以 root 身份运行但 $USER 返回普通用户?

所以我打算运行一个 shell 脚本,但它不起作用,因为它需要以 root 身份运行。事情是我使用 root 身份登录命令。

这怎么可能?

root@polo-E15301:/home/polo/Downloads# echo $USER
polo      <<<---- regular user
root@polo-E15301:/home/polo/Downloads# whoami
root
root@polo-E15301:/home/polo/Downloads# echo $UID
0
root@polo-E15301:/home/polo/Downloads# 

答案1

su专门root时,su USER除非请求登录 shell,否则设置;man su

为了向后兼容,su默认不更改当前目录,仅设置环境变量HOMESHELL(加上USER并且LOGNAME如果目标用户不是根)。建议始终使用该--login选项(而不是其快捷方式-)以避免混合环境引起的副作用。

如果你使用su --login你会发现USER被设置为root。

在 shell 脚本中,应该使用类似的工具来测试 root 权限,id而不是依赖环境变量。也可以看看谁设置 $USER 和 $USERNAME 环境变量?

相关内容