2013-04-10 11 views
0

在我的Linux機器,路徑配置如下werid行爲

非根用戶: 的/ usr/local/sbin中:在/ usr/local/bin中:/ usr/sbin目錄:的/ usr/bin中:/ sbin目錄:/ bin中:在/ usr /本地/ JAVA

根用戶: 的/ usr/local/sbin中:在/ usr/local/bin中:/ usr/sbin目錄:在/ usr/bin中:/ sbin:/ bin

whe NI試圖

須藤回聲$ PATH

它顯示了非root用戶路徑不僅沒有根路徑

但是當我把

回聲$ PATH

在腳本中,並嘗試與sudo執行,它給roo t路徑。有誰知道這個理由?其實sudo是以root身份執行命令,但在第一種情況下,它不能正常工作。

回答

1

當您運行sudo echo $PATH,外殼永遠調用sudo之前擴大$PATH,所以你真的運行以下命令:

sudo echo /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/java 

,讓你看到的結果 - 非root用戶PATH顯示。

echo $PATH嵌入的腳本和你做sudo somescript.sh,運行該腳本的外殼以root身份運行,所以當它擴展$PATH作爲解釋腳本的一部分,它看到根的環境,並顯示根版本路徑。

爲了避免在第一種情況下擴初,你可以這樣做:

sudo bash -c 'echo $PATH' 

假設你sudoers設置爲允許。單引號會阻止非root用戶shell在將其作爲命令傳遞給bash之前擴展該變量。

2

sudo echo $PATH執行echo $PATH作爲當前非根環境中的根,即非根值爲$PATH。當您執行sudo bash somescript.sh時,bash將以root用戶身份執行,並在初始化期間加載包含根值$PATH的根環境。