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

Path 将文件夹添加到sudo路径而不使用-i,path,sudo,Path,Sudo,关于向sudo路径添加文件夹,已经有很多关于堆栈溢出的讨论。但是,我看过的其他教程都没有真正回答以下问题: 如何在不使用-I的情况下将文件夹添加到sudo路径 这是我的设置。我要添加的文件夹是“/var/folder”。有一个bash脚本“/var/folder/script.sh”。我在/root/.bashrc文件中添加了以下代码行: if [ -d /var/folder ]; then PATH=/var/folder:$PATH fi 现在,当我输入命令“sudo echo$

关于向sudo路径添加文件夹,已经有很多关于堆栈溢出的讨论。但是,我看过的其他教程都没有真正回答以下问题:

如何在不使用-I的情况下将文件夹添加到sudo路径

这是我的设置。我要添加的文件夹是“/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”上工作,但这是事实。

尽管$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="/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

尽管$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="/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

尽管$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="/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

尽管$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="/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