2014-01-13 55 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 
相關問題