【问题标题】:Add folder to sudo path without -i在没有 -i 的情况下将文件夹添加到 sudo 路径
【发布时间】:2014-01-13 18:08:03
【问题描述】:

关于在 sudo 路径中添加文件夹已经在 Stack Overflow 上进行了很多讨论。但是,我见过的其他教程都没有真正回答以下问题:

如何在不使用 -i 的情况下将文件夹添加到 sudo PATH。

这是我的设置。我要添加的文件夹是“/var/folder”。有 bash 脚本“/var/folder/script.sh”。我在 /root/.bashrc 文件中添加了以下代码行:

if [ -d /var/folder ]; then
    PATH=/var/folder:$PATH
fi

现在,当我输入命令“sudo echo $PATH”时,我得到以下输出:

/var/folder:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

问题是,当我运行命令“sudo script.sh”时,似乎找不到该脚本。输出如下:

sudo: script.sh: 找不到命令

尽管选项卡自动完成功能适用于“sudo script.sh”。

【问题讨论】:

    标签: path sudo


    【解决方案1】:

    尽管 $PATH 是在您对其进行回显时定义的,但对于运行脚本,它实际上并没有定义。因此,要查看发生了什么,您可以运行以下命令:

    sudo -s
    echo $PATH
    

    您会注意到它将是:

    /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

    $PATH 是从哪里获得的?

    它在您的 sudoers 文件中定义:

    默认值secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

    解决方案

    您可以更新 sudoers 文件中的 Defaults secure_path 以获得正确的值。

    Defaults        secure_path="/var/folder:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    

    回到你在运行时看到正确值的方式:

    sudo echo $PATH
    

    由于您在运行该命令之前使用 /var/folder 定义了 $PATH,因此它只是将 $PATH 替换为该值,但您的 sudo 实际路径是

    /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

    所以你正在有效地运行

    sudo echo /var/folder:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
    

    【讨论】:

      猜你喜欢
      • 2016-11-25
      • 2012-07-04
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多