问题描述
一个奇怪的问题,我知道。这是脚本:
echo $USER
这是我用来运行它的命令:
sudo ./myscript.sh
现在它打印 “root” 但我希望它打印 jon
,我的用户名。有没有办法通过更改脚本而不是命令来做到这一点?
最佳方法
使用 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
,在 “ENVIRONMENT” 部分:\n
SUDO_USER Set to the login name of the user who invoked sudo.\n
\n
联机帮助页还描述了一些其他由
sudo
定义的相关环境变量,可能会派上用场,例如SUDO_UID
和SUDO_GID
次佳方法
除了 @Eliah Kagan’s answer above 之外,我想指出的是,无论是否在 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 上。