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

我正在使用cygwinWindows上获得unix环境。

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

在执行cygwin脚本的过程中,通过使用简单的echo命令在terminal上显示某些信息。我想在应用程序中显示所有信息。

我怎样才能做到这一点??

Solutions Collecting From Web of "如何在java中编写运行使用cygwin在Windows环境内使用rSync的unix shell脚本?"

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

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

然后等待进程完成,并获取它的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(); } } }
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工作,所以你将不得不在那里做更多的研究。

你可以使用这样的东西

 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); } 

PS这不处理错误