当前位置: 首页>>技术教程>>正文


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

, , ,

问题描述

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

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_UIDSUDO_GID

  • Getting $USER inside shell script when running with sudo?

次佳方法

除了 @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 上。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/13533.html,未经允许,请勿转载。