[英]How to code in java to run unix shell script which use rSync internally in windows environment using cygwin?
我正在使用cygwin在Windows上獲取Unix環境。
我有一些在cygwin上運行的shell腳本,用於執行同步工作和其他操作。 我想通過Java代碼執行這些腳本。
同樣在cygwin上執行腳本的過程中,某些信息通過使用簡單的echo命令顯示在終端上。我想在我的應用程序中顯示所有這些信息。
我怎樣才能做到這一點??
使用運行時類運行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
配合使用,因此您將不得不在此進行更多研究。
你可以用這樣的東西
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這不能處理錯誤
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.