-2
Process log_remover = Runtime.getRuntime().exec("echo \"bleh\" > test.txt");
log_remover.waitFor();
log_remover.destroy();

これは何もしません

Process node_creation = Runtime.getRuntime().exec("cp -r ../HLR"+String.valueOf(count-1)+" ../HLR"+String.valueOf(count));
node_creation.waitFor();
node_creation.destroy();

ただし、これは機能します:S

4

3 に答える 3

1

リダイレクトは、シェルが使用されている場合にのみ機能します。Runtime.exec()はシェルを使用しません。

Linuxコマンドを実行するJavaを参照してください

于 2012-04-10T12:08:56.847 に答える
1

リダイレクトはシェルによって処理され、ここではシェルを呼び出さないため、リダイレクトを使用することはできません。一方、このようなものは機能します。

Runtime.getRuntime().exec(new String[] {"sh",  "-c", "echo 'bleh' > text.txt"});

exec()コマンドラインで引用符で囲まれた文字列を適切にトークン化することは、シェルだけが実行できる他のことであるため、文字列の配列をとる形式を使用するようにこれを変更したことに注意してください。

于 2012-04-10T12:09:49.833 に答える
0

私が以前に何度も見た古典的な間違い...

の最初の引数Runtime.getRuntime().exec()実行可能ファイルであるため、コードは文字通りと呼ばれるコマンドを実行しようとしていますが、実行しよecho \"bleh\" > test.txtうとしているはずechoです。実行可能ファイルへの引数は、次のように実行可能ファイルの後に渡されます。

Runtime.getRuntime().exec("echo", new String[]{"bleh"});

* nix演算子>はシェルのものであるため、出力のリダイレクトは別の話です。これをJavaで複製するには、コマンドの出力ストリームを取得し、それを別のプロセスの入力ストリームにポンプする必要があります

于 2012-04-10T12:12:16.313 に答える