2011-12-03 147 views
1

我試圖編寫一個setup.sh腳本,用於在安裝應用程序時搜索並安裝所需的組件。如果找不到必需的組件,它將提示安裝它。我已經使用sudo apt-get install對於這一點,我想給用戶提供的密碼傳遞給sudo的,就像這樣:Here Document not working with sudo su

read passwd 
sudo apt-get install clisp <<EOF 
$passwd 
$passwd 
EOF 

但是,這是行不通的。輸入的密碼沒有被傳遞給sudo。爲什麼這不會發生?我的使用有任何錯誤嗎?

+0

爲什麼有兩個'$ passwd'表達式?一個用於'sudo',好的。但第二個? –

+0

考慮更新'/ etc/sudoers'來允許你在沒有密碼的情況下運行該命令(我認爲是''NOPASSWD')。它比用純文本將密碼存儲在文件中更安全。 –

回答

4

密碼不是從標準輸入中讀取,而是從「當前終端」中讀取。這不能通過重定向來改變。但是sudo提供了一個選項-S,它從標準輸入而不是從終端讀取密碼。

編輯:對整個問題的更好的解決方案是避免截取密碼。如果需要密碼,sudo將自行要求密碼。使用-A選項,您還可以爲此問題提供圖形用戶界面。並且由於sudo爲該輸入保留了一個時間戳,因此它在接下來的15分鐘內不會詢問密碼(默認情況下,即可配置)。因此多個sudo調用也不是問題。

相關問題