java - 在命令行中运行 Shell 脚本

标签 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 文件夹并运行相同的命令,它就可以工作。

当我在命令行运行相同的命令时,它将不起作用。

最佳答案

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

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

关于java - 在命令行中运行 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8646259/

相关文章:

java - Mockito 中的可选 stub

java - Firebase 身份验证对象在 fragment 中崩溃

c++ - GCC 与 Cygwin/Win7 : missing syscall. h

java - 实例化/从枚举返回时类型安全的接口(interface) (Java)

java - 长字符串的正确格式

c - C 中文件存在的问题

c++ - 从 Windows 命令行运行 C++ 应用程序

Cygwin:制造问题

java - thrift/java 中的异常类型层次结构

git - 无法在 Windows 上使用 Cygwin 启动 Git GUI