Jon*_*han 23 command-line bash sudo environment-variables
一个奇怪的问题,我知道。这是脚本:
echo $USER
Run Code Online (Sandbox Code Playgroud)
这是我用来运行它的命令:
sudo ./myscript.sh
Run Code Online (Sandbox Code Playgroud)
现在它打印“root”,但我希望它打印jon我的用户名。有没有办法通过更改脚本而不是命令来做到这一点?
Eli*_*gan 30
SUDO_USER环境变量而不是USER.sudo将运行它的用户名放在SUDO_USER环境变量中:
ek@Io:~$ sudo sh -c 'echo $USER'
[sudo] password for ek:
root
ek@Io:~$ sudo sh -c 'echo $SUDO_USER'
ek
Run Code Online (Sandbox Code Playgroud)
所以你可以简单地在你的脚本中替换$USER为$SUDO_USER:
ek@Io:~$ sudo sh -c 'echo $USER'
[sudo] password for ek:
root
ek@Io:~$ sudo sh -c 'echo $SUDO_USER'
ek
Run Code Online (Sandbox Code Playgroud)
man sudo,在“环境”部分:
SUDO_USER Set to the login name of the user who invoked sudo.
Run Code Online (Sandbox Code Playgroud)
手册页还描述了一些其他相关的环境变量定义的sudo可能会派上用场,例如SUDO_UID和SUDO_GID