如何通过Java的runtime()。exec()方法执行bash for循环

时间:2015-09-08 17:26:56

标签: java bash shell command

基本上,我在通过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 ex:

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

但我承认我很新,实际上并不知道这是怎么做的。

1 个答案:

答案 0 :(得分:0)

formkdirmv等命令是shell命令,要求您在执行时置于shell中。

如果您将命令放在顶部有适当hashbang的文件中,然后从java调用它,它应该可以工作。

但是,您可以在纯java中执行“for f in folder”部分,然后使用ProcessBuilder执行脚本