Jonathan Asked: 2017-01-01 11:08:54 +0800 CST2017-01-01 11:08:54 +0800 CST 2017-01-01 11:08:54 +0800 CST 我可以从使用 `sudo` 运行的脚本中访问原始 $USER 变量吗? 772 一个奇怪的问题,我知道。这是脚本: echo $USER 这是我用来运行它的命令: sudo ./myscript.sh 现在它打印“root”,但我希望它打印jon我的用户名。有没有办法通过更改脚本而不是命令来做到这一点? command-line 2 个回答 Voted Best Answer Eliah Kagan 2017-01-01T11:23:42+08:002017-01-01T11:23:42+08:00 使用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 使用 sudo 运行时在 shell 脚本中获取 $USER? Byte Commander 2020-04-23T03:46:30+08:002020-04-23T03:46:30+08:00 除了上面@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。
使用
SUDO_USER
环境变量而不是USER
.sudo
将运行它的用户的名称放在SUDO_USER
环境变量中:因此,您可以在脚本中简单地替换
$USER
为:$SUDO_USER
延伸阅读
man sudo
,在“环境”部分:手册页还描述了一些其他
sudo
可能派上用场的相关环境变量,例如SUDO_UID
和SUDO_GID
使用 sudo 运行时在 shell 脚本中获取 $USER?
除了上面@Eliah Kagan 的回答之外,我想指出的是,您还可以轻松地进行扩展,无论它是否在
sudo
上下文中运行都可以:默认情况下,它会扩展为 的值
$SUDO_USER
,但如果该变量未设置或为空,则它会回退到 的值$USER
。有关 Bash 中默认参数扩展的更多信息,请参见https://wiki.bash-hackers.org/syntax/pe#use_a_default_value。