2012-12-04 13 views
10

私のプログラムからシェルスクリプトを実行したいが、何もしないようだ。私はLinuxのターミナルで同じコマンドを直接実行したので、それは私のJavaコードを推測しているので、正常に動作します。ご覧のとおり、私は最初にPrintWriterを使ってシェルスクリプトにコマンドを書いていましたが、これはシェルスクリプト自体の実行には影響しないと考えています。どんな助けもありがとう!Javaでbashシェルスクリプトを実行する

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    String nfdump = "nfdump -o csv -r /home/shane/Documents/nfdump/nfcapd.201211211526>blank.txt"; 

    try { 
     FileWriter fw = new FileWriter("/home/shane/Documents/script.sh"); 

     PrintWriter pw = new PrintWriter(fw); 

     pw.println("#!/bin/bash"); 
     pw.println(nfdump); 

     pw.close(); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    Process proc = null; 

    try { 
     proc = Runtime.getRuntime().exec("sh /home/shane/Documents/script.sh"); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
+3

あなたが直接 'nfdump' – RNJ

+1

興味表示されます私は自分のGUIからnfdumpを使用できるようにしたい、それは私が構築しているソフトウェアの一部です –

+0

を実行していない理由)ProcessBuilderを代わりにRuntime.getRuntime(を見てください...私はこれを使用すると、私は少数の問題やものを持っているように見えるもう少しundestandable – Shane

答えて

25

結果を得るには、返されたProcessを使用する必要があります。

Runtime#execはコマンドを別のプロセスとして実行し、タイプProcessのオブジェクトを返します。 Process#waitForに電話して、新しいプロセスが完了するまでプログラムが待機するようにする必要があります。次に、返されたProcessオブジェクトに対してProcess.html#getOutputStream()を呼び出して、実行されたコマンドの出力を検査できます。

プロセスを作成する別の方法は、ProcessBuilderを使用することです。

Process p = new ProcessBuilder("myCommand", "myArg").start(); 

ProcessBuilderを使用すると、個別の引数としてコマンドの引数をリストします。

Runtime#execProcessBuilder#startの違いの詳細については、Difference between ProcessBuilder and Runtime.exec()とを参照してください。

+0

ありがとう! ProcessBuilderは完璧に機能しました! – Shane

+1

実際に、サブプロセスの出力を取得する場合は、['Process#getInputStream()'](http://docs.oracle.com/javase/7/docs/api/)を呼び出す必要があります。 java/lang/Process.html#getInputStream%28%29)、プロセスの出力ストリームにパイプします。 –

4

これを試してください、それは動作します。

あなたはそれがPATH環境変数が セットではありません新しいシェルを起動しますJavaからスクリプトを実行
String[] cmd = new String[]{"/bin/sh", "path/to/script.sh"}; 
Process pr = Runtime.getRuntime().exec(cmd); 
3

以下のコードを使用してPATH環境変数を設定すると、スクリプトが実行されます。

String[] env = {"PATH=/bin:/usr/bin/"}; 
String cmd = "you complete shell command"; //e.g test.sh -dparam1 -oout.txt 
Process process = Runtime.getRuntime().exec(cmd, env); 
関連する問題