2014-02-17 141 views
3

如何從Java ProcessBuilder執行像這樣的命令(使用sudo)? (我並不需要包括密碼,因爲普通用戶以root身份運行myscript.log沒有密碼的許可。)Java ProcessBuilder sudo bash命令的正確命令格式是什麼?

sudo bash /home/me/path/myscript.sh arg1 arg2 arg3 >> /var/log/path/myscript.log 2>&1 

我的問題是怎麼做這個命令的元素,會傳遞到的構造Java的ProcessBuilder

例如,「sudo」是 ctor的最後一個參數,還是其他地方的第一個參數?你怎麼知道他們去哪裏以及命令的哪些元素成爲ProcessBuilder的參數?

回答

3

這裏的問題是重定向不會在您調用的bash命令中執行。

嘗試使用傳遞命令來執行作爲字符串全光照對於bash -c選項:

sudo bash -c "/home/me/path/myscript.sh arg1 arg2 arg3 >> /var/log/path/myscript.log 2>&1" 

爲了使用java的ProcessBuilder使用此命令我會嘗試構建這樣的:

new ProcessBuilder("sudo", "bash", "-c", "/home/me/path/myscript.sh arg1 arg2 arg3 >> /var/log/path/myscript.log 2>&1"); 

通過使用ProcessBuilder,您基本上會要求它執行sudo命令並向其提供3個參數。作爲回報,sudo會像這樣調用你的命令:bash -c "..."

當進程提示輸入sudo密碼時,您可能仍會遇到問題。