2012-10-12 91 views
0

問題是,我正在運行一個.sh文件,該文件使用Java的Runtime.exec(「」)方法運行3個命令,但只執行了來自.sh文件的第一個命令。Java僅執行.sh文件中的第一個命令

任何人都可以回答可能是什麼問題?

這是我的代碼。

Process process =  Runtime.getRuntime().exec("run.sh"); 
    process.waitFor(); 
    DataInputStream d = new DataInputStream(process.getInputStream()); 
        System.out.println(d.readLine()); 
        System.out.println("test"); 

run.sh腳本如下:

 #! /bin/sh 
    echo "start" 
    ls -a 
    echo "stop" 

它執行run.sh但得到僅執行第一命令(echo命令)。我嘗試了不同的命令,但結果保持不變。只有第一個被執行。

+4

顯示你的代碼。 – Jesper

+0

你應該包括你的java類的源碼和shell腳本。 –

+1

歡迎來到Stackoverflow!通常最好提供一些示例代碼 - 就你而言,你能告訴你如何調用腳本以及腳本的外觀如何,並描述你的期望? –

回答

1

DataInputStream d = new DataInputStream(process.getInputStream()); System.out.println(d.readLine());

shell腳本正在執行所有命令,但您只是讀取包含shell腳本所有輸出的進程輸入流的第一行。相反,讀直到流的結尾,你會看到所有命令的輸出。

String output = StringUtils.join(IOUtils.readLines(process.getInputStream)); 

兩個StringUtilsIOUtils分別是從Apache的百科全書琅和公地IO工具類。

如果你不想使用公共庫,然後

StringBuilder output = new StringBuilder; 
String line; 
while ((line = d.readLine()) != null) { 
    output.append(line); 
} 
System.out.println(output.toString());