0
我對使用ProcessBuilder和Runtime.exec的sudo調用的命令有挑戰。我想到的ProcessBuilder是整體更好的解決方案,但都產生相同的結果 - 他們執行shell命令在Ubuntu上很好,但如果我嘗試,例如做了須藤,我mysql命令:Java和sudo命令執行
public static void runProcess(String[] process) {
String s = null;
try {
Process p = new ProcessBuilder(process).start();
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
while ((s = stdInput.readLine()) != null) { System.out.println(s); }
while ((s = stdError.readLine()) != null) { System.out.println(s); }
} catch (IOException e) { e.printStackTrace(); }
}
這兩個命令工作:
String[] cmdArgs0 = { "sudo", "echo", "Done" };
runProcess(cmdArgs0);
String[] cmdArgs1 = { "bash", usbDrivePath+"/ASWebUI/Install.sh" };
runProcess(cmdArgs1);
但這並不:
String[] cmdArgs2 = { "sudo", "-i", "mysqldump", "Core", ">", cachePath+"/SQLDumps/Core.sql" };
runProcess(cmdArgs2);
錯誤:
mesg: ttyname failed: Inappropriate ioctl for device
mysqldump: Couldn't find table: ">"
謝謝!這工作。 – user3260912
@ user3260912很高興幫助!請檢查我最後一次編輯的答案,我已將'Redirect.appendTo(dumpFile)'更改爲'Redirect.to(dumpFile)',因爲第一個對應於'>>'而不是'>'。 –