2013-04-23 144 views
1

我在寫一個shell腳本來啓動幾道工序,我的用戶路徑是不可用的。因爲這些進程需要sudo訪問,所以我使用sudo運行shell腳本。但是,當我這樣做時,我無法訪問我的路徑變量。我已經爲/etc/profile.d/extra-path.sh添加了一個shell腳本,它爲我的用戶添加了這些腳本。使用sudo運行shell腳本時,

有人能告訴我應該如何添加這些路徑變量,以便可以在sudo中運行的shell腳本中訪問它們,或者有沒有辦法在shell腳本中使用我的用戶路徑運行命令?

這是我想有工作的腳本:

#!/bin/bash 
#start stuff up 

nohup mongod 
#mongod fails as an unknown command, even though it's part of my path 

nohup /cust/env/local/cust/jboss-5.1.0.GA/bin/run.sh -b 0.0.0.0 -Djava.awt.headless=true 
#jboss needs access to the JAVA_HOME path variable which 
#doesn't exist on the path used in this shell script 
+0

看看'男人sudoers',你可以反覆折騰'secure_path','env_reset','env_keep','env_check',甚至可能是'exempt_group'。 – Wrikken 2013-04-23 23:43:08

回答

6

試試這個..

sudo -i /path/to/script.sh 

或..

sudo env PATH=$PATH /path/to/script.sh 

或..

sudo -E /path/to/script.sh 

其中一人應該工作,取決於你的系統。

+0

當我嘗試這樣做,它給我的錯誤:'-sh:./script.sh:沒有這樣的文件或directory'。你知道這是爲什麼嗎? – CorayThan 2013-04-23 23:19:59

+0

@ CorayThan-你的腳本命名爲'script.sh',它是否是chmoded? – vidit 2013-04-23 23:21:07

+0

好吧,我真的嘗試過start-mongod-jboss.sh。真正的問題將是chmoded。 chmoding腳本有什麼作用?該系統是一個CentOS Linux服務器。 – CorayThan 2013-04-23 23:32:58

1

有幾個不同的解決方案,這個我已經找到了。

sudo -i [command] 

sudo -s [command] 

都工作,但您訪問的命令-i,如果你在根目錄裏,所以你必須指定完整路徑shell腳本(或把它放在你的垃圾箱裏)。使用-s你可以像訪問當前目錄一樣訪問該命令。

你也可以使用這些腳本本身運行myscript.sh,或者使用它們裏面的這個腳本在你需要sudo訪問的命令前面。我更願意將它們放在這些命令的前面,因爲我不必輸入太多的內容來運行腳本!

2

是sudos下降的路徑其實是個功能。不要試圖通過複製用戶的路徑來解決這個問題,如一些示例所示。 (想象一下,如果一個壞的用戶將bash複製到/ tmp/ls中,那麼將設​​置PATH =/tmp /。根shell可能會執行ls並意外地以root權限運行bash命令!糟糕,現在壞的用戶有一個root shell。)

您可以通過添加這對您的腳本(略低於#!/bin/sh

. /etc/profile.d/extra-path.sh 

的頂部添加額外的路徑(。意爲「讀取該文件,如果它是這裏抄」)