在命令行运行Shell脚本

时间:2011-12-27 15:23:39

标签: java cygwin

我使用cygwin运行Shell脚本。

Process p;
InputStream in;
BufferedReader br;
String line;
String cmd;
cmd = "D:/cygwin/bin/bash -c '/bin/test/app.sh" +three_ltr_id+""+mon_code+""+year_code+""+part_no+""+version_no+" '";
System.out.println("EXECUTING: " + cmd);
p = Runtime.getRuntime().exec(cmd);
in = p.getInputStream();
p.waitFor();
 br = new BufferedReader(new InputStreamReader(in));
 System.out.println("OUT:");
 while ((line = br.readLine()) != null) {
 System.out.println(line);
 System.out.println("SCRIPT EXECUTED PROPERLY");

这显示了EXECUTING和我传递给脚本的命令。

如果我进入 D:/ cygwin / bin / test 文件夹并运行相同的命令,它就可以工作。

当我在命令行运行相同的命令时,它将无法工作。

1 个答案:

答案 0 :(得分:2)

你需要立即开始从p.getInputStream()读取输入,并继续阅读它,直到没有更多。在Windows上,管道中很少或没有缓冲区,一旦填充,进程就会挂起。

错误流也是如此。您可以启动线程来读取两个流,或者在启动流程以组合常规输出和错误的方式中有一个选项,您可以从那里读取它们。

相关问题