我可以从使用“sudo”运行的脚本中访问原始 $USER 变量吗?

我可以从使用“sudo”运行的脚本中访问原始 $USER 变量吗?

我知道这是一个奇怪的问题。以下是脚本:

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

进一步阅读

答案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

相关内容