命令行 - 可不可以從`sudo`運行的腳本中訪問原始的$USER變數?

分享于 

2分钟阅读

ubuntu

 

问题:

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

 
echo $USER



下面是我用来运行它的命令:

 
sudo ./myscript.sh



有没有办法更改脚本来实现?


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



进一步阅读

在"ENVIRONMENT"的节中:


SUDO_USER Set to the login name of the user who invoked sudo.




答案2:

我想指出,如果在sudo上下文中运行,你也可以很容易地得到:


echo"${SUDO_USER:-$USER}"



默认情况下,这将扩展到$SUDO_USER的值,但是如果该变量是unset或empty,则它回退到$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



COM  COMM  acc  Comma  命令行  VAR  
相关文章