- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 java 在控制台上打印 shell 脚本的输出。当我手动运行脚本时,我得到
C:/Users/user1/Desktop/shell.sh: line 78: /usr/ucb/ps: No such file or directory
<STATUS>: Probe [ devicename ] is not running!
但是,当我尝试在 Java 程序上运行它时,输出没有打印在控制台上。我的代码是:
ProcessBuilder processBuilder = new ProcessBuilder("C:/Program Files/Git/git-bash.exe","C:/Users/user1/Desktop/shell.sh");
try {
Process process = processBuilder.start();
StringBuilder output = new StringBuilder();
BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
output.append(line + "\n");
System.out.println(line);
}
int exitVal = process.waitFor();
if (exitVal == 0) {
System.out.println("Success!");
System.out.println(output);
System.exit(0);
} else {
//abnormal...
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
我得到的唯一输出是“成功”。当我调试代码时,我发现代码永远不会进入条件
while ((line = reader.readLine()) != null)
尽管如此,在 bash 终端中,还是有一些输出行。为什么会发生这种情况?
我被困在这一点上,我找不到这个问题的任何其他解释。请帮忙。
最佳答案
您正在运行 git-bash.exe,它将作为 Windows 应用程序打开。尽管 Java 可以访问 git-bash.exe 的 stdout/stderr 流,但这些流不一定与 git-bash.exe 中 shell 脚本内部启动的 stdout/err 相同。
查看命令的 stdout/err 的一种方法是制作 .sh 脚本的 java 友好版本,该版本启动原始 sh 并将输出重定向到特定文件,然后您可以在 java 中访问该文件。
ProcessBuilder pb = new ProcessBuilder("C:/Program Files/Git/GIT-BASH.EXE","/c/Users/blah/somescript.sh");
somescript.sh:
#!/bin/sh
runtheoriginalcommand > ~/somepath.out 2> ~/somepath.err
您还可以向包装器添加额外的参数以传递要使用的 out/err 文件,这样就不会与任何其他启动或硬编码输出文件发生争用。
关于java - 为什么我的 shell 脚本的输出没有打印在控制台中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59051487/
使用下面的代码,我能够得到正确的答案,但是它重复了 两次 . 例如,我只想要 [1.2038, 1.206] 的结果,但下面的代码打印 [1.2038, 1.206, 1.2038, 1.206] .
我正在尝试显示我从 https://www.findomestic.it/ 中抓取 的结果, 我收到一个错误 我的代码在这里: from selenium.webdriver.common.by im
假设我有以下代码: double median = med(10.0, 12.0, 3.0); //method returns middle number as double 现在,我想写一条消息说
我是一名优秀的程序员,十分优秀!