【问题标题】:running command with sudo and go into root (sudo -i) and run the command使用 sudo 运行命令并进入 root (sudo -i) 并运行命令
【发布时间】:2012-07-29 14:45:44
【问题描述】:

问题是

运行这两个命令有什么区别。

作为根,我制作了一个自定义环境。变量

export A="abcdef"

然后在root shell中

sudo -i
echo $A  

返回

abcdef (as expected)

但是,当我回到普通用户并运行时

sudo -i echo $A

它返回空行。

那么当你运行命令 sudo echo $A 时,它是否使用普通用户的环境变量和 shell?

即使我运行 sudo echo $A 也有办法获取 abcdef 吗?

谢谢


编辑 1

当您说您已将变量 A 作为 root 时,我假设您的意思是您在 root 的 .profile 或类似的东西中执行了此操作。 -->(是的!)


编辑 2

这很有意义 但遇到了一些麻烦。

当我这样做时

sudo -i 'echo $A' 

我明白了
-bash: echo $A: 找不到命令。

但是当我这样做时

su -c 'echo $A' 

它会回馈

abcdef

有什么问题

sudo -i 'echo $A' 

命令?

【问题讨论】:

    标签: unix sudo


    【解决方案1】:

    如果您想将您的环境传递给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.
    

    环境以交互方式和通过命令行运行的任何方式保存。

    【讨论】:

    • 先生,您不知道您的评论对一个可怜的老人有多大帮助!! :P +10
    【解决方案2】:

    当您说您已将变量 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 一样)
    【解决方案3】:

    虽然我无法在我的机器上复制结果,但 man page for sudo 指定 -i 选项将取消设置/删除一些变量。

    man sudo
    

    -i [命令]

    -i(模拟初始登录)选项运行在 目标用户的 passwd(5) 条目作为登录 shell。这意味着 将读取特定于登录名的资源文件,例如 .profile 或 .login 由壳。如果指定了命令,则将其传递给 shell 执行。否则,将执行交互式 shell。须藤尝试 在运行 shell 之前更改到该用户的主目录。它 还初始化环境,保持 DISPLAY 和 TERM 不变, 设置 HOME 、 MAIL 、 SHELL 、 USER 、 LOGNAME 和 PATH ,以及 Linux 和 AIX 系统上 /etc/environment 的内容。 所有其他 环境变量被移除。

    所以我会尝试不使用 -i 选项。

    【讨论】:

      猜你喜欢
      • 2014-04-30
      • 1970-01-01
      • 2016-09-07
      • 2017-02-08
      • 1970-01-01
      • 1970-01-01
      • 2020-05-01
      • 1970-01-01
      • 2012-10-01
      相关资源
      最近更新 更多