我有一个用例,我想要sudo su - user1
某个用户,然后运行脚本,然后在脚本中我想要获取SUDO_USER
。但是,当我使用而不是时,SUDO_*
环境变量没有设置。sudo su - user1
sudo su app
sudo su user1
[sudo] password for rbhanot:
$ env | grep -i sudo
SUDO_COMMAND=/bin/su user1
SUDO_GID=4361
SUDO_UID=4361
SUDO_USER=rbhanot
如果我su
使用登录 shell 调用,则不会设置这些变量
sudo su - user1
$ env|grep -i sudo
$
如果我使用稍微不同的命令,它会起作用sudo -i
sudo -i -u user1
$ env|grep -i sudo
SUDO_COMMAND=/bin/ksh
SUDO_GID=4361
SUDO_UID=4361
SUDO_USER=rbhanot
那么为什么这些SUDO_*
变量没有su - user1
具体得到。
答案1
尝试不使用 -i ,变量应该会为您所用。
如果这不起作用,您可能会考虑让他们在命令行上指定变量?也许并不理想,但它会给用户带来你想要的灵活性。
ie. sudo -i -u joe SUDO_GID=4361 SUDO_UID=4361 SUDO_USER=rbhanot /bin/ksh
如果用户需要记住这一点,您可以在他们的 .bash_profile 中为其添加一个别名。
ie. alias myroot="sudo -i -u joe SUDO_GID=4361 SUDO_UID=4361 SUDO_USER=rbhanot /bin/ksh"
然后,他们只需输入“myroot”,它就会运行所写的 sudo 命令。