不使用-i将文件夹添加到sudo路径

时间:2014-01-13 18:08:03

标签: path sudo

关于向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:找不到命令

尽管tab-auto-complete适用于“sudo script.sh”,但这仍然存在。

1 个答案:

答案 0 :(得分:3)

虽然$ PATH是在对它进行回显时定义的,但为了运行脚本,它实际上并未定义。因此,要查看正在发生的事情,您可以运行以下命令:

sudo -s
echo $PATH

您会注意到它将是:

  

的/ usr / local / bin中:在/ usr / bin中:/ bin中:在/ usr /本地/游戏:在/ usr /游戏

从哪里获取$ 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 /本地/游戏:在/ usr /游戏

所以你有效地运行

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