如何在java中编写代码来运行使用cygwin在Windows环境中内部使用rSync的unix shell脚本?

时间:2012-03-23 14:28:47

标签: java windows shell java-ee cygwin

我正在使用cygwin在Windows上获取unix环境。

我有一些在cygwin上运行的shell脚本来执行同步工作和其他事情。我想通过java代码执行这些脚本。

同样在cygwin上执行脚本时,使用简单的echo命令在终端上显示某些信息。我想在我的应用程序中显示所有这些信息。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

使用Runtime类运行Cygwin。这非常脆弱,取决于你的设置,但在我的机器上我会这样做:

Runtime r = Runtime.getRuntime();
Process p = r.exec("C:\\dev\\cygwin\\bin\\mintty.exe --exec /cygpath/to/foo.sh");

然后等待Process完成,并获取它的InputStream对象的句柄,以查看发送到stdout和stderror的内容。

命令的第一部分是运行cygwin,第二部分是执行某些脚本或命令(使用-e--exec)。我会在DOS提示符下测试这个命令,看看它在切割任何代码之前是否先工作。此外,请查看可用的选项:

C:\dev\cygwin\bin\mintty.exe --help

同样来自DOS提示符。

编辑:以下内容适用于我打印版本信息


public class RuntimeFun {
   public static void main(String[] args) throws Exception {
      Runtime r = Runtime.getRuntime();
      Process p = r.exec("C:\\dev\\cygwin\\bin\\mintty.exe --version");
      p.waitFor();

      BufferedReader buf = new BufferedReader(
               new InputStreamReader(
                        p.getInputStream()));
      String line = buf.readLine();
      while (line != null) {
          System.out.println(line);
          line = buf.readLine();
      }
   }
}

不幸的是,似乎无法让它与--exec一起使用,所以你将不得不在那里做更多的研究。

答案 1 :(得分:0)

你可以使用这样的东西

String cmd = "ls -al";
Runtime run = Runtime.getRuntime();
Process pr = run.exec(cmd);
pr.waitFor();
BufferedReader buf = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String line = "";
while ((line=buf.readLine())!=null) {
    System.out.println(line);
}

P.S。这不会处理错误