Unix 使用sudo运行命令并进入root(sudo-i)并运行该命令
问题是 运行这两个命令的具体区别是什么 作为root用户,我制作了一个自定义env。变数Unix 使用sudo运行命令并进入root(sudo-i)并运行该命令,unix,sudo,Unix,Sudo,问题是 运行这两个命令的具体区别是什么 作为root用户,我制作了一个自定义env。变数 export A="abcdef" 然后在根壳中 sudo -i echo $A 返回 abcdef (as expected) 但是,当我回到正常用户并运行 sudo -i echo $A 它返回空行 那么,当您运行命令sudoecho$A时,它是否使用了普通用户提供的环境变量和shell 即使我运行sudo echo$a,也有办法获得abcdef吗 谢谢 编辑1 当你说你已经把一个变量a作
export A="abcdef"
然后在根壳中
sudo -i
echo $A
返回
abcdef (as expected)
但是,当我回到正常用户并运行
sudo -i echo $A
它返回空行
那么,当您运行命令sudoecho$A时,它是否使用了普通用户提供的环境变量和shell
即使我运行sudo echo$a,也有办法获得abcdef吗
谢谢
编辑1
当你说你已经把一个变量a作为根,我想你的意思是你是在根的.profile或者类似的东西中做的。-->(是的!)
编辑2 这很有道理 但是有一些麻烦 当我这样做的时候
sudo -i 'echo $A'
我得到-bash:echo$A:未找到命令 但是当我这样做的时候
su -c 'echo $A'
它回馈
abcdef
这辆车怎么了
sudo -i 'echo $A'
命令?虽然我无法在我的计算机上复制结果,但指定-I选项将取消设置/删除少量变量
man sudo
-i[命令]
-i(模拟初始登录)选项运行
passwd(5)作为登录shell的目标用户条目。这意味着
将读取特定于登录的资源文件,如.profile或.login
靠贝壳。如果指定了命令,则会将该命令传递给shell以供执行
执行。否则,将执行交互式shell。sudo尝试
在运行shell之前更改到该用户的主目录。信息技术
同时初始化环境,保持显示和术语不变,
设置主页、邮件、SHELL、用户、日志名和路径,以及
Linux和AIX系统上的/etc/environment的内容所有其他
环境变量已删除。
因此,我将尝试不使用-I选项。如果要将环境传递到
sudo
,请使用sudo-E
:
-E The -E (preserve environment) option indicates to the
security policy that the user wishes to preserve their
existing environment variables. The security policy may
return an error if the -E option is specified and the user
does not have permission to preserve the environment.
环境是以交互方式和通过从命令行运行的任何方式保存的。当您说您已将变量
a
设置为root时,我想您的意思是您在root的.profile或类似的内容中执行了此操作。我假设你的意思是普通用户没有A
集合。在这种情况下,以下规定适用:
当您运行命令sudo-i echo$A
时,这首先由本地shell解释,并替换$A
。这将导致sudo-i echo
,这就是实际执行的内容
你的意思是:
sudo -i 'echo $A'
将echo$A
传递到sudo shell
~ rnapier$ sudo -i echo $USER
rnapier
~ rnapier$ sudo -i 'echo $USER'
root
请尝试以下语法:
sudo -i echo '$USER'
是的,你的假设是正确的,但还是有问题。请参考编辑手册。谢谢。语法sudo-i echo'$USER'返回$USER。仅供参考,这是在非root用户上完成的。如果我尝试,sudo-I echo“$user”,那么它将返回我拥有的非root用户huser(就像上面的rnapier)先生,您不知道您的评论对一个可怜的老人有多大帮助!!:P+10