我正在使用cygwin在Windows上获取unix环境。
我有一些在cygwin上运行的shell脚本来执行同步工作和其他事情。我想通过java代码执行这些脚本。
同样在cygwin上执行脚本时,使用简单的echo命令在终端上显示某些信息。我想在我的应用程序中显示所有这些信息。
我该怎么做?
答案 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。这不会处理错误