【发布时间】:2020-05-19 19:37:33
【问题描述】:
记录的输出显示正在运行的命令,可以看出这包括bash 命令:
thufir@dur:~/NetBeansProjects/threadedExecTelnet$
thufir@dur:~/NetBeansProjects/threadedExecTelnet$ gradle run
> Task :run
May 19, 2020 12:25:47 P.M. net.bounceme.dur.exec.ExecList execute
INFO: [bash, -c, ls /home/thufir/NetBeansProjects/threadedExecTelnet]
build
build.gradle
gradle
gradlew
gradlew.bat
LICENSE
README.md
settings.gradle
src
BUILD SUCCESSFUL in 859ms
3 actionable tasks: 1 executed, 2 up-to-date
thufir@dur:~/NetBeansProjects/threadedExecTelnet$
虽然我不太介意费力和冗长的代码:
public void execute() throws IOException {
log.info(listToExec.toString());
String[] arrayToExec = listToExec.toArray(new String[0]);
Process process = Runtime.getRuntime().exec(arrayToExec);
InputStream inputStream = process.getInputStream();
Reader inputStreamReader = new InputStreamReader(inputStream);
try (BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) {
String line = null;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
System.out.flush();
}
}
}
我不明白为什么,有时,bash 似乎是必需的,而有时则不是。
【问题讨论】:
-
'ls' 是一个 bash 命令,所以运行它肯定需要 bash
标签: java exec inputstream bufferedreader runtime.exec