2010-10-20 128 views
27

我創建了一個Bash安裝程序腳本,它爲OSX和Linux編譯並安裝了一些庫。因爲我的腳本中的一些命令(「make install」,「apt-get install」,「port install」等)需要sudo,我需要用戶提供密碼。需要sudo密碼的Bash腳本

當第一個sudo命令即將執行時,當前用戶會被要求輸入密碼,但由於這通常是在編譯階段之後,啓動腳本和輸入密碼之間總會有一段時間。

我想把密碼輸入+檢查在腳本的開頭。另外我很好奇,如果這真的是安裝系統庫的好方法。

或者我可以將庫安裝在不需要sudo的本地沙箱位置,但是我必須告訴apt-get和macports安裝其庫的位置,而不是默認的/ usr/local /和/ opt/local,我不知道該怎麼做,也不知道這是否是一個聰明的主意。

回答

51

要獲取密碼,只需在腳本的開頭放置sudo echo "Thanks."即可。

但我願意這樣的解決方案:

if [[ $UID != 0 ]]; then 
    echo "Please run this script with sudo:" 
    echo "sudo $0 $*" 
    exit 1 
fi 
+0

清晰簡單。謝謝! – 2010-10-20 09:57:39

+0

爲什麼'回聲'爲sudo,如果你可以直接'sudo'? – 2012-10-17 12:02:14

+0

@TobiasKienzler:因爲這個問題。 – 2012-10-17 14:51:13

4

對於那些不想(只用在需要的地方在腳本中sudo來限制風險)所接受的第一部分,以提升整個腳本誰回答sudo echo "Thanks"的作品,但不會通過退出腳本來響應sudo密碼失敗。要做到這一點,腳本,包括sudo的命令,並希望確保sudo訪問它的使用可能與

if [[ ! $(sudo echo 0) ]]; then exit; fi 

需要說明開始之前,你是依靠sudoers文件超時的存在,這將持續腳本的持續時間壓制其餘的提示。