我知道这是一个奇怪的问题。以下是脚本:
echo $USER
这是我用来运行它的命令:
sudo ./myscript.sh
现在它打印“root”,但我希望它打印jon
我的用户名。有没有办法通过更改脚本而不是命令来实现这一点?
答案1
使用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
因此您只需$USER
在$SUDO_USER
脚本中替换:
echo $SUDO_USER
进一步阅读
man sudo
在“环境”部分中:SUDO_USER Set to the login name of the user who invoked sudo.
手册页还描述了一些其他
sudo
可能有用的相关环境变量,SUDO_UID
例如SUDO_GID
答案2
此外@Eliah Kagan 的上述回答另外,我想指出的是,您还可以轻松地进行扩展,无论它在上下文中运行与否,它都可以工作sudo
:
echo "${SUDO_USER:-$USER}"
默认情况下,这会扩展为的值$SUDO_USER
,但如果该变量未设置或为空,则会恢复为的值$USER
。
$ bash -c 'echo "${SUDO_USER:-$USER}"'
bytecommander
$ sudo bash -c 'echo "${SUDO_USER:-$USER}"'
bytecommander
有关 Bash 中默认参数扩展的更多信息,请参见https://wiki.bash-hackers.org/syntax/pe#use_a_default_value。