Java仅执行.sh文件中的第一个命令

时间:2012-10-12 13:20:32

标签: java ubuntu

问题是我正在运行一个.sh文件,其中有3个命令使用Java的Runtime.exec(“”)方法,但只有来自.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命令)。我尝试了不同的命令,但结果保持不变。只有第一个被执行。

1 个答案:

答案 0 :(得分:1)

  

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

shell脚本正在执行所有命令,但您只是从进程中读取第一行'输入流,包含shell脚本的所有输出。相反,读到流的末尾,你会看到所有命令的输出。

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

StringUtilsIOUtils都是来自apache commons lang和commons IO的实用程序类。

如果您不想使用公共库,那么

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