2011-07-29 8 views
0

linuxでnmコマンドをJavaから実行したい。javaからlinuxコマンドを実行します。

私はこのコードを試してみました:

command = "nm -l file1.o > file1.txt"; 
Process p = Runtime.getRuntime().exec(command); 

をしかし、コードと間違っているものを、動作していないのですか?

+2

どのような例外がありますか? –

答えて

1

は、あなたがする必要があるものです:あなたは-cとシェルを起動した場合

、あなたはあなたのコマンドを実行することができ

String command = "nm -l file1.o > file1.txt"; 
Process p = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", command}); 

以下の "単純な答え" はうまくいかないでしょう

String command = "/bin/sh -c 'nm -l file1.o > file1.txt'"; 
Process p = Runtime.getRuntime().exec(command); 
メソッドは、区切り文字として空白を使用して文字列を単純に分割し、引用符を無視するため、

になります。したがって、上記の例は、次のコマンド/引数リストを指定するのと同じです。

+0

どうもありがとうございました。 – Ashish

+0

このコマンドの出力をどのように取得できますか? shを使って新しいシェルを開くと、どのようにコマンドの出力をキャプチャできますか? –

4

これは実行可能ファイルではなく、実際にはシェルスクリプトです。

ここ
/bin/sh -c "command > here" 
+0

お返事ありがとうございます。これはubuntuではうまくいきません。私はなぜあなたが書いたのと同じコードを使用しているのかわかりません。 – Ashish

+0

そうですね...私の答えを見てください。 –

0

パイプの代わりに、コマンドの標準出力を読むことができます。例については、Java exec() does not return expected result of pipes' connected commandsを参照してください。

"> file.txt"を使用して出力をリダイレクトするのではなく、出力が何であってもそれを読み取って、StringBufferまたはOutputStreamなどに書き出すことができます。

これは、stderrを読み込んでエラーがあるかどうかを確認できるという利点があります(デバイスなどにスペースがないなど)。 (あなたもあなたのアプローチを使って "2>"を使用してそれを行うことができます)

関連する問題