0

问题是我正在运行一个 .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 命令)。我尝试了不同的命令,但结果保持不变。只有第一个被执行。

4

1 回答 1

1

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

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

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

StringUtils和IOUtils都是分别来自 apache commons lang 和 commons IO 的实用程序类。

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

StringBuilder output = new StringBuilder;
String line;
while ((line = d.readLine()) != null) {
    output.append(line);
}
System.out.println(output.toString());
于 2012-10-13T06:32:58.683 回答