关于向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”,但这仍然存在。
答案 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