2011-12-27 12 views
1

cygwinを使用してシェルスクリプトを実行しています。シェルスクリプトをコマンドラインで実行する

Process p; 
InputStream in; 
BufferedReader br; 
String line; 
String cmd; 
cmd = "D:/cygwin/bin/bash -c '/bin/test/app.sh" +three_ltr_id+""+mon_code+""+year_code+""+part_no+""+version_no+" '"; 
System.out.println("EXECUTING: " + cmd); 
p = Runtime.getRuntime().exec(cmd); 
in = p.getInputStream(); 
p.waitFor(); 
br = new BufferedReader(new InputStreamReader(in)); 
System.out.println("OUT:"); 
while ((line = br.readLine()) != null) { 
System.out.println(line); 
System.out.println("SCRIPT EXECUTED PROPERLY"); 

これは、EXECUTINGと私がスクリプトに渡したコマンドを示しています。

D:/ cygwin/bin/testフォルダに入って同じコマンドを実行すると動作します。

コマンドラインで同じコマンドを実行しても機能しません。

+1

「それはうまくいかない」とはどういう意味ですか?あなたはどんなエラーを出していますか?コマンドが見つかりませんか?またはコマンドが見つかりましたが、出力が正常ではありませんか? – taskinoor

+0

出力は/bin/test/app.shのように正しくありません:行226:get_ProgramID:コマンドが見つかりません –

答えて

2

p.getInputStream()からの入力を直ちに読み込み、それ以上がなくなるまで読み続ける必要があります。 Windowsでは、パイプ内にバッファがほとんどまたはまったくなく、プロセスが満杯になるとハングアップします。

エラーストリームについても同じです。スレッドを起動して両方のストリームを読むことができます。また、プロセスを起動して通常の出力とエラーを組み合わせるオプションもあり、そこから読み込むこともできます。

関連する問題