2011-12-27 254 views
1

我使用cygwin運行Shell腳本。在命令行運行Shell腳本

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 2011-12-27 15:28:29

+0

輸出不正確,如/bin/test/app.sh:第226行:get_ProgramID:command not found – 2011-12-27 15:34:11

回答

2

您需要立即開始讀取來自p.getInputStream()的輸入,並繼續閱讀,直到沒有更多。在Windows上,管道中很少或沒有緩衝區,並且一旦進程填滿,進程就會掛起。

錯誤流也是如此。您可以啓動線程來讀取這兩個流,也可以選擇啓動流程以結合常規輸出和錯誤的方式,然後您可以從中讀取它們。