【发布时间】:2020-03-21 21:43:12
【问题描述】:
我正在尝试使用 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 终端中,也有输出行。为什么会这样?
我被困在这一点上,我找不到任何其他解释这个问题。请帮忙。
【问题讨论】:
-
显示shell脚本
-
@dassum shell 文件基本上有 200 行长,对我来说没有任何意义。但我也尝试使用基本的回显消息,它不打印输出。
-
你可以尝试使用带有 echo 消息的 hello world shell 脚本吗?
-
bash 脚本可以打印到标准输出或标准错误。所以也许你的脚本打印到标准错误?您可以从
process.getErrorStream()而不是process.getInputStream()获得。 -
@dassum 是的,我试过了,但是控制台中没有打印回显消息。
标签: java shell spring-boot processbuilder