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