簡體   English   中英

如何在Java中編寫代碼以運行在Windows環境中使用cygwin內部使用rSync的unix shell腳本?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM