0

Java Runtime.exec() を使用して egrep を実行します

String command = "egrep \'(Success|Loading\\.\\.\\.|Loaded : READY|Found a running instance)\' "+ instance.getPath() + "/log";
Runtime.getRuntime().exec(command);

stdout は常に null で、stderr には "egrep: Unmatched ( or (".) と表示されますが、コマンドをシェルにコピーして実行すると、正しい値が返されます。

4

2 に答える 2

1

解決策は非常に単純(Success|Loading\\.\\.\\.|Loadedです。有効な正規表現ではありません。

を使用する場合、引用符で空白を保護することはできませんProcess.exec(String)。常にexec()配列をとるバージョンを使用するか、さらに良いことに、を使用してProcessBuilderください。

そうすれば、各引数を単一のJava文字列として渡すことができ、スペースやその他の特殊文字によって問題が発生することはありません。

于 2012-05-14T09:14:06.023 に答える
0

一重引用符はエスケープしないでください。コマンドラインでもエスケープしませんよね?

于 2012-05-14T09:08:10.303 に答える