Path 将文件夹添加到sudo路径而不使用-i
关于向sudo路径添加文件夹,已经有很多关于堆栈溢出的讨论。但是,我看过的其他教程都没有真正回答以下问题: 如何在不使用-I的情况下将文件夹添加到sudo路径 这是我的设置。我要添加的文件夹是“/var/folder”。有一个bash脚本“/var/folder/script.sh”。我在/root/.bashrc文件中添加了以下代码行: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$
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