2009-03-04 15 views
2

test.shというシェルスクリプトが/tmp/padmフォルダにあります。そのシェルスクリプトで は、私は、Javaコードを使用してシェルスクリプトを実行しようとしていますJavaを使用してシェルスクリプトを実行しているときに問題が発生しました

echo "good" 

つの文を持っています。

String cmd=("/tmp/padm/.test.sh");    
Runtime rt = Runtime.getRuntime(); 
Process pr=rt.exec(cmd); 

しかし、私の問題は、私はシェルスクリプトの出力である「良い」を参照してくださいすることはできませんよということです。

スクリプトの実行方法を教えてください。

+0

シェルスクリプトを実行するための

シェルスクリプトtest.shコード

#!/bin/sh echo "good" 

Javaコード。間違っていたらもう一度編集してください。 –

答えて

1

これは動作しません。スクリプトの最初の行に「ハッシュ・バング」を追加して、Linuxに適切なインタプリタ(たとえばbash)を使用してスクリプトを解釈するか、Javaから明示的にbashで実行する必要があることをLinuxに伝える必要があります。

+0

私は理解していません...あなたのシェルスクリプトの内容はどうやって分かりますか?彼はそれを投稿していません –

+0

String [] cmd = {"cmd.exe"、 "/ C"、 "D:/ Development/saveReport。bat "} コマンドプロンプトを開き、バタッハファイルを実行してください バッチファイルを実行しているときに同じことをしてください。 –

+0

これはLinux環境に類似しているとは思えません! –

1

「端末で」と言うときはどういう意味ですか?あなたは、プロセスからの出力/エラーを表示したい場合は、あなたが使用する必要があります。それ以外は

process.getErrorStream(); 
process.getOutputStream(); 

を、私はシェルスクリプト

+0

端末が表示され、出力が表示されるはずです –

+0

Sp ielberg映画:「ターミナル」?それとも別のターミナルについて話しているのですか? –

+0

@oxbow_lakes:Windowsではコマンドプロンプトウィンドウと呼ばれ、Linuxではシェルまたはターミナルと呼ばれます。同じこと。 –

4

あなたに呼び出すためにRuntime.execの使用から見ることができる全く問題ありません次のコードでコマンド出力を得ることができます。お役に立てれば。

Process process = Runtime.getRuntime().exec(cmd); 
String s = ""; 
BufferedReader br = new BufferedReader(new InputStreamReader(process 
      .getInputStream())); 
while ((s = br.readLine()) != null) 
{ 
    s += s + "\n"; 
}  
System.out.println(s); 

BufferedReader br2 = new BufferedReader(new InputStreamReader(process.getErrorStream())); 
while (br2.ready() && (s = br2.readLine()) != null) 
{ 
    errOutput += s; 
} 
System.out.println(errOutput); 
1
process.getErrorStream(); 
process.getOutputStream(); 

oxbow_lakesで指摘したように正しいアプローチです。

さらに、シェルスクリプトの場所を引数としてexec /bin/shを実行していることを確認してください。

0

これはNeed sample java code to run a shellscriptの複製です。

私の答えのサンプルプログラムは、標準エラーと標準出力を出力します(サンプルプログラムは少し後で追加されます)。

完全な入出力バッファによる実行の問題を防ぐために、streamGobblersは別々のスレッドで実行されていることに注意してください。

StreamGobblersに出力をリストに格納させ、プロセスを実行した後でリストを直接stdoutにダンプするのではなく、そのリストを取得することができます。

1

これは、間違いなく動作します。私はあなたの質問が何であるかわからないので、私はそれを推測をしたtest.sh

  try { 
       Runtime rt = Runtime.getRuntime(); 
       Process pr = rt.exec(new String[]{"/bin/sh", "/tmp/padm/.test.sh"}); 

       BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream())); 
       String line = ""; 
       while ((line = input.readLine()) != null) { 
        System.out.println(line); 
       } 
      } catch (Exception e) { 
       System.out.println(e.toString()); 
       e.printStackTrace(); 
      }