linuxでnmコマンドをJavaから実行したい。javaからlinuxコマンドを実行します。
私はこのコードを試してみました:
command = "nm -l file1.o > file1.txt";
Process p = Runtime.getRuntime().exec(command);
をしかし、コードと間違っているものを、動作していないのですか?
linuxでnmコマンドをJavaから実行したい。javaからlinuxコマンドを実行します。
私はこのコードを試してみました:
command = "nm -l file1.o > file1.txt";
Process p = Runtime.getRuntime().exec(command);
をしかし、コードと間違っているものを、動作していないのですか?
は、あなたがする必要があるものです:あなたは-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);
メソッドは、区切り文字として空白を使用して文字列を単純に分割し、引用符を無視するため、
になります。したがって、上記の例は、次のコマンド/引数リストを指定するのと同じです。
どうもありがとうございました。 – Ashish
このコマンドの出力をどのように取得できますか? shを使って新しいシェルを開くと、どのようにコマンドの出力をキャプチャできますか? –
これは実行可能ファイルではなく、実際にはシェルスクリプトです。
ここ/bin/sh -c "command > here"
お返事ありがとうございます。これはubuntuではうまくいきません。私はなぜあなたが書いたのと同じコードを使用しているのかわかりません。 – Ashish
そうですね...私の答えを見てください。 –
パイプの代わりに、コマンドの標準出力を読むことができます。例については、Java exec() does not return expected result of pipes' connected commandsを参照してください。
"> file.txt"を使用して出力をリダイレクトするのではなく、出力が何であってもそれを読み取って、StringBufferまたはOutputStreamなどに書き出すことができます。
これは、stderrを読み込んでエラーがあるかどうかを確認できるという利点があります(デバイスなどにスペースがないなど)。 (あなたもあなたのアプローチを使って "2>"を使用してそれを行うことができます)
どのような例外がありますか? –