2013-01-10 42 views
2

我使用followig代碼從我的Java應用程序運行一個命令:呼叫終端和運行命令通過Java應用程序

String cmd[] = {"sh","-c", "sudo chmod 777 -R " + path}; 
Terminal.runCommand(cmd); 

我想僅僅通過點擊它來執行.jar和選擇「用...打開」 - >「Java」;

的問題是,應用程序保持瓦亭,因爲在「命令」命令的密碼,但沒有終端被調用時,用戶不能給密碼..

所以,我怎麼能叫coomand以上和一個終端給用戶一個機會插入密碼和應用程​​序終於繼續?

非常感謝!

+0

你是否期待'ls_exec'也能用sudo運行?使用Process/ProcessBuilder,您可以讀取輸出並寫入程序的輸入。你可以用'Terminal'做什麼? –

+0

@PeterLawrey我沒有想到,其實我覺得「le_exec」沒有必要,是不是?謝謝。 – Filipea

+0

我以前沒見過它,但它會保持一個窗口打開(假設有一個窗口),直到用戶點擊輸入。我懷疑這裏沒有用。 –

回答

0

這是一個sudo問題,而不是Java問題; sudo以根爲根本。你的過程沒有root權限,所以sudo需要驗證人類身份。這是一個功能,而不是一個錯誤。系統不應該允許你運行root命令。

一個選項可能是使用gksu代替,它在某些發行版中默認發貨。它的工作方式類似,但會在GUI中彈出密碼對話框,而不是在(在此情況下不存在)終端上。

另一種可能是簡單地以root身份運行Java進程,這可能會帶來所有安全隱患。在某些情況下,這可能是一個有效的選擇,但要小心。

或者您可以檢查sudo和sudoers的手冊頁 - 可以配置帳戶不要求密碼,並且可以在它們執行時將其限制爲特定命令。

+0

我認爲這兩者都是,因爲我從Java應用程序使用sudo。我知道這是一個功能,我不是說它是一個錯誤。我會盡量按照你的說法使用gksu,如果它有效,我會告訴你。謝謝。 – Filipea

+0

從C,Python,Ruby,Mono或Perl應用程序中調用它會有完全相同的問題。這不是Java問題。 –

+0

它沒有爲我工作。我想我已經找到了一種方法,我會嘗試使用「echo password | sudo -S chmod 777 -R path」。我將提示使用Java(rsrs)的字段爲用戶輸入密碼,然後在上面的命令中傳遞「password」的位置。我現在要回家了,明天我會公佈結果。謝謝。 – Filipea