我有一個Java應用程序調用tcsh腳本,該腳本又調用同一目錄中的perl腳本。如果我通過鍵入「runPerlScript.sh」從命令運行此腳本,它將完全正常工作,並且應該會生成幾個輸出文件。但是,如果我從Java調用腳本,使用下面的代碼:即使輸出重定向,Java進程也會提前停止
String[] runCmd = {"/bin/tcsh","-c","/filepath/runPerlScript.sh"};
Process run = Runtime.getRuntime().exec(runCmd);
BufferedReader reader = new BufferedReader(new InputStreamReader(run.getInputStream()));
String line = "";
line = reader.readLine();
System.out.println("\nStarting while.");
while((line)!=null){
System.out.println("Output from script: "+line);
line=reader.readLine();
}
reader.close();
System.out.println("Finished running perl script.");
它打印出從我的shell腳本回聲陳述我的控制檯(我使用NetBeans),但只生成4個輸出文件(通常情況下它會產生近50)。看起來好像該進程正在退出,因爲在生成這4個文件之後,我的shell腳本中的一條回顯語句顯示「Finished running runPerlScript.sh」輸出到我的控制檯。我嘗試了幾種不同的方法來運行這個腳本,包括ProcessBuilder,但似乎沒有生成輸出文件。上面的代碼實際上是我能夠生成任何輸出的唯一方式,因爲ProcessBuilder只是導致了hangups。有誰知道我可以如何不斷讓腳本運行?
即使使用Process.waitFor()方法,生成的輸出仍然沒有變化。它仍然只有4個文件,Java認爲它已經完成。 –
您是否嘗試過直接運行腳本而不是調用tcsh(假設您的shebang行狀態爲#!/ bin/tcsh)。 –
是的,仍然只產生4個文件:( –