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

标签 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 命令)。我尝试使用不同的命令,但结果保持不变。只有第一个被执行。

最佳答案

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 的实用程序类。

如果您不想使用公共(public)库,则

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

关于Java 仅执行 .sh 文件中的第一个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12859982/

相关文章:

java - HttpUrlConnection - 奇怪的延迟

java - 如何在 Spring-Data-MongoDB 中使用 @Query 组合 AND 和 OR 子句?

java - Google 表示 JDO 不会从 Datastore 进行级联删除。你是怎么做到的?

ubuntu - 如何在 Mule ESB 3.1.2 中正确配置 newrelic

macos - 如何在 SSH 时获得 ZSH 提示

android - ionic 平台配置错误: ubuntu

java - 两次调用 Web 服务时 Wss4j 和 Soaphandler 错误

java - 启动 100 个按钮的更有效方法

linux - 如何在终端中使用 vsim 命令运行 Modelsim?

python - Systemd:启动操作超时。终止