如何通过 Java 的 runtime().exec() 方法执行 bash for 循环
How to execute a bash for loop via Java's runtime().exec() method
基本上,我在通过 Java 执行 for 循环时遇到了问题。当我直接进入控制台时它工作,"mkdir"、"mv"、"cp" 等。当我尝试执行 for 循环时,它说找不到程序 "for".
错误:
java.io.IOException: Cannot run program "for": java.io.IOException: error=2, No such file or directory
循环示例:
for f in folder/*.filetype; do folder/scriptname $f > ${f}s; done
在 java 例如:
String s = "for f in folder/*.filetype; do folder/scriptname $f > ${f}s; done";
Process process = Runtime.getRuntime().exec(s);
在这里研究了一下之后我也尝试了:
String s = "for f in folder/*.filetype; do folder/scriptname $f > ${f}s; done";
String[] command = {s};
Process process = new ProcessBuilder(command).start();
BufferedReader reader = new BufferedReader(new InputStreamReader(
process.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
process.waitFor();
int exitValue = process.exitValue();
process.destroy();
按照我在此处找到的方法尝试后,错误更改为显示整个字符串,但仍然没有 运行。
java.io.IOException: Cannot run program "for f in folder/filetype; do folder/scriptname $f > ${f}s; done": java.io.IOException: error=2, No such file or directory
但我承认我是个新手,实际上并不知道它到底想做什么。
for
、mkdir
和 mv
等命令是 shell 命令,执行它们时要求您处于 shell 中。
如果您将命令放在顶部带有适当 hashbang 的文件中,然后从 java 调用它,它应该可以工作。
但是,您可以在 java 中完成 "for f in folder" 部分,然后使用 ProcessBuilder
执行脚本
基本上,我在通过 Java 执行 for 循环时遇到了问题。当我直接进入控制台时它工作,"mkdir"、"mv"、"cp" 等。当我尝试执行 for 循环时,它说找不到程序 "for".
错误:
java.io.IOException: Cannot run program "for": java.io.IOException: error=2, No such file or directory
循环示例:
for f in folder/*.filetype; do folder/scriptname $f > ${f}s; done
在 java 例如:
String s = "for f in folder/*.filetype; do folder/scriptname $f > ${f}s; done";
Process process = Runtime.getRuntime().exec(s);
在这里研究了一下之后我也尝试了:
String s = "for f in folder/*.filetype; do folder/scriptname $f > ${f}s; done";
String[] command = {s};
Process process = new ProcessBuilder(command).start();
BufferedReader reader = new BufferedReader(new InputStreamReader(
process.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
process.waitFor();
int exitValue = process.exitValue();
process.destroy();
按照我在此处找到的方法尝试后,错误更改为显示整个字符串,但仍然没有 运行。
java.io.IOException: Cannot run program "for f in folder/filetype; do folder/scriptname $f > ${f}s; done": java.io.IOException: error=2, No such file or directory
但我承认我是个新手,实际上并不知道它到底想做什么。
for
、mkdir
和 mv
等命令是 shell 命令,执行它们时要求您处于 shell 中。
如果您将命令放在顶部带有适当 hashbang 的文件中,然后从 java 调用它,它应该可以工作。
但是,您可以在 java 中完成 "for f in folder" 部分,然后使用 ProcessBuilder
执行脚本