0
私は、ProcessBuilderとRuntime.execの両方を使ってsudoの呼び出されたコマンドに問題があります。私は、ProcessBuilderをより良いソリューションが全体的にあると考えていますが、どちらも同じ結果を生成 - 彼らはシェルがUbuntuの上に微細なコマンドを実行するが、私は、例えばsudoの-i 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(); }
}
これらの2つのコマンド作品:
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)に変更しました。最初のものは '>'の代わりに '>>'に対応しています。 –