web-dev-qa-db-ja.com

ランタイムのexec()メソッドが出力をリダイレクトしていません

Process p = Runtime.getRuntime().exec("sh somescript.sh &> out.txt");

このコマンドはJavaを使用して実行しています。スクリプトは実行されていますが、ストリームをファイルにリダイレクトしていません。さらに、ファイルout.txtが作成されていません。

このスクリプトは、シェルで実行すると正常に実行されます。

何か案は?

18
user2110167

リダイレクトするには ProcessBuilder を使用する必要があります。

ProcessBuilder builder = new ProcessBuilder("sh", "somescript.sh");
builder.redirectOutput(new File("out.txt"));
builder.redirectError(new File("out.txt"));
Process p = builder.start(); // may throw IOException
35
johnchen902

コマンドを実行すると、シェルは実行されておらず、シェルのコマンドまたは関数は使用できません。 &>のようなものを使用するには、シェルが必要です。あなたはそれを持っていますが、あなたはそれをそれに渡していません。代わりに試してください。

Runtime.getRuntime().exec(new String[] { "sh", "somescript.sh &> out.txt" });
6
Peter Lawrey