当前位置: 首页 > 面试题库 >

如何在Java中保存Shell脚本的回显输出

单品
2023-03-14
问题内容

我正在研究一个Java程序,该程序在JUnit测试中调用多个Shell脚本(因此,除了。和E之外没有输出),这些脚本可操纵文件和SQL表,然后将所述表中的数据与其期望值进行比较。一切都在理论上可行,但是我遇到了一个阶段性错误,其中一种类型的测试按预期工作,而另一种类型的测试在十分钟超时后失败。我将问题隔离为Shell脚本之一,但是我没有编写此脚本,因此无法以任何方式进行更改。解决此问题的最佳方法是保存相关脚本的输出,该输出来自一系列回显调用。是否有某种简单/可靠的方法来保存回声输出?我已经用谷歌搜索了一下,但是没有任何反应。我还没有尝试存储输出,所以我没有

//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()的优点时,我需要使用该版本的程序。

tl; dr问题:我的Java程序能否轻松运行shell脚本并保存其回显输出?如果不是,是否有一个等号-f来读取输出?


问题答案:

要尽可能轻松地执行此操作,您应该真正使用外部html" target="_blank">进程输出的异步读取和写入。那可能是阻塞并导致超时的原因,也是脚本将echo其内容返回的方式,并且这些内容没有被使用。

我不久前发布了对此完全相同的问题的答案,当从外部流程中读取内容时,该方法在所有情况下都有效,这
就是 为什么不再使用Process.exec()和使用的原因ProcessBuilder



 类似资料:
  • 问题内容: 在Jenkinsfile Groovy脚本阶段,假设我要发出一个Linux命令来输出字符串的行和列,并想要在特定行的输出中获取第n列。这样的命令的一个示例是“ ls -al”。所以我这样做正确吗? 但是,如何获取本质上为$ {COL [4]}的值,该值是“ ls -al”命令的第五列,即目录大小? 谢谢! 问题答案: 您在示例中显示的bash脚本不会返回正确的目录大小。它将以递归方式返

  • 问题内容: 我试图解析WMIC的输出,然后获取PID。 我的脚本如下: 输出如下: 我的目标是获取进程ID。 我已经尝试过将空间作为FOR循环中的delims。然而没有运气。 所以我的问题是如何格式化WMIC的列并获取列? 问题答案: WMIC使用SQL语法的子集。通过将LIKE运算符与通配符一起使用,可以在功能上将FINDSTR测试放在WMIC WHERE子句中。由于它在批处理脚本中,因此需要加

  • 问题内容: 非常有趣的是,如果您打算使用代码与Bash 一起显示 那么它只会显示 我试过了,不起作用。 我如何回显表格?我将在文件名字符串上使用它。 问题答案: 由于允许变量名中带有下划线,因此命令: 正在尝试回显(在您的情况下可能为空),然后是。这样做的原因是因为参数扩展是一个贪婪的操作- 在变量名后将使用尽可能多的合法字符。 手册的相关部分指出: 该字符引入参数扩展,命令替换或算术扩展。 可以

  • 我在Gradle中使用这个问题执行shell脚本作为参考,但是,我无法弄清楚如何让它工作。 这是我的档案: 我myScript.sh #! /bin/sh 回显脚本文件中的Hello world 但是,每当我运行脚本时,我只能看到“来自gradle的Hello world”,而看不到“来自脚本文件的Hello world”。 为什么?

  • 问题内容: 我想将要在以后使用的命令存储在变量中(不是命令的输出,而是命令本身) 我有一个简单的脚本,如下所示: 但是,当我尝试更复杂的操作时,它会失败。例如,如果我做 输出为: 知道如何将这样的命令(带有管道/多个命令)存储在变量中以备后用吗? 问题答案: 使用eval:

  • 问题内容: 我保留一个名为的shell脚本文件 ,并从构建中执行该文件。 当我执行构建时,它失败。 控制台输出如下: 我在应该保留外壳脚本文件以便执行的位置上感到困惑。 问题答案: 如果看到错误消息,则提示 在工作空间中构建/ var / lib / jenkins / workspace / AutoScript 并根据您的评论将urltest.sh放入 / var / lib / jenkin