Sådan kode i java for at køre unix shell script, der bruger rSync internt i Windows miljø ved hjælp cygwin?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger cygwin til at få unix miljø på windows.


Jeg har nogle shell script, der kører på cygwin for at udføre synkroniseringsværker og andre ting. Jeg vil udføre disse script gennem java kode.


Også under udførelsen af ​​scripts på cygwin vises visse oplysninger på terminalen ved hjælp af simpel ekkokommando. Jeg vil gerne vise alle de oplysninger i min ansøgning.


Hvordan kan jeg gøre det ??

Bedste reference


Brug Runtime klassen til at køre Cygwin. Dette er meget skørt og afhængig af dit setup, men på min maskine ville jeg gøre: [8]


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


Så vent på, at processen er færdig, og få et håndtag til det s InputStream objekter for at se, hvad der blev sendt til stdout og stderror. [9]


Den første del af kommandoen er at køre cygwin, og den anden er at udføre noget script eller kommando (ved hjælp af -e eller --exec). Jeg ville teste denne kommando på DOS-prompten for at se, om det virker først, før du skærer en kode. Se også på mulighederne ved at gøre:


C:devcygwininmintty.exe --help


Også fra DOS-prompten.


EDIT: Følgende virker for mig at udskrive versionsinformation



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



Desværre kan det ikke synes at få det til at fungere med --exec, så du bliver nødt til at gøre mere forskning der.

Andre referencer 1


Du kan bruge noget som dette


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. dette håndterer ikke fejl