2014-01-13 56 views
0

已经有一个谈了很多关于堆栈溢出已经完成有关文件夹添加到sudo的路径。但是,没有我见过的其他教程的确实回答了以下问题:到sudo的路径添加文件夹,而不-i

我如何将文件夹添加到PATH须藤不使用-i。

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

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

现在,当我在命令中键入“须藤回声$ PATH”我得到以下输出:

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

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

须藤:script.sh:找不到

这是不顾事实,即在“命令script.sh”选项卡,自动完成的作品命令。

回答

3

虽然$ PATH是在你做回声时定义的,但对于运行脚本来说,它并没有实际定义。所以看到发生了什么,你可以运行以下命令:

sudo -s 
echo $PATH 

你会发现,这将是:

在/ usr/local/bin目录:在/ usr/bin中:/ bin中:/ usr/local/games:/ usr/games

从哪里得到$ PATH?

默认secure_path =“在/ usr/local/sbin中:在/ usr/local/bin目录:/ usr/sbin目录:在/ usr/bin中:/ sbin目录

它是在你的sudoers文件中定义:/BIN”

解决方案

可以secure_path更新默认的sudoers文件有正确的值。

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

再回到你是如何看到正确的值,当你跑了:既然你已经定义

sudo echo $PATH 

$ PATH用在/ var /文件夹中运行该命令之前,它只是取代了$ PATH与价值,但对须藤你的实际路径是

在/ usr/local/bin目录:在/ usr/bin中:/ bin中:在/ usr /本地/游戏:在/ usr /游戏

,所以你得到有效运行

sudo echo /var/folder:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games 
相关问题