如何保存在Java中shell脚本的回声输出[复制](How to save a shell scr

2019-06-23 15:57发布

这个问题已经在这里有一个答案:

  • 从我们的java程序执行另一个java程序[复制] 3个回答

我工作的那JUnit测试中调用几个Shell脚本一个Java程序,操作文件和SQL表(除。的和E的因此没有输出),然后在比较数据表说他们的预期值。 一切工作的理论,但是我遇到strage错误,其中一个类型的测试工作正常,而其他类型的十分钟超时后失败。 我已经分离出的问题是Shell脚本中的一个,但是我没有写这个剧本,我无法改变它以任何方式。 我可以解决此,最好的方法是节约的脚本有问题的输出,它来源于一系列回声通话。 是否有一个有点简单/可靠的方式来保存回声输出? 我GOOGLE了一下,但什么也没有上来。 我还没有试过存储输出又那么我没有试图告诉你,但我已经写的代码,可能是相关的是:

//Currently using BufferedWriter, File, FileWriter, IOException, and Writer
import java.io.*;

//Method to write to a log file
public void record(String input) throws IOException {
  writer = new BufferedWriter(new FileWriter(file,true));
  writer.write(input + "\n");
  writer.close();
}

Runtime rt = Runtime.getRuntime();

//Several of these since a lot of file manipulation/script running occurs
process = rt.exec("./shell.sh");
process.waitFor();

在另一个问题,我问,有人推荐不使用的Runtime.exec()有几个原因。 虽然我认识的优势,不使用EXEC(),我需要为这个版本的程序。

该文艺青年最爱的问题:我的Java程序可以轻松地运行shell脚本以及挽救他们的回显输出? 如果没有,是否有一个尾-f相当于读取输出?

Answer 1:

要做到这一点尽可能轻松,你真的应该使用Asyncronous阅读和外部流程的输出的写作。 这就是可能是阻止并导致超时,是脚本的方式echo荷兰国际集团它的内容回来,他们没有被消耗掉。

我张贴的答案,这完全一样的问题,前一段时间 ,这从外部进程读取数据时适用于所有情况,而且是为什么 ,为什么不使用的Process.exec()不再和使用ProcessBuilder



Answer 2:

如何利用编写一个新的脚本文件,说scriptWithOutput.sh ,到回波重定向到一个日志文件

#!/bin/sh

log="someDir/someLog.log"

# This saves all you "echoes" to the log file
exec &> $log

# Your shell script
./shell.sh

然后在你的Java代码

process = rt.exec("./scriptWithOutput.sh");

然后尝试读取someDir/someLog.log从Java?



文章来源: How to save a shell script's echo output within Java [duplicate]