Wie zum ausführen von unix-Befehlen über Windows/cygwin unter Verwendung der Java

Ich versuche zu erreichen, sind zwei Dinge:

  1. Ich arbeite mit cygwin auf Windows 7 ausführen, meine unix-shell-Befehlen, und ich brauche, um den Prozess zu automatisieren, indem eine Java-app. Ich weiß schon, wie die windows shell mit Java unter Verwendung der 'Prozess' Klasse ' und Runtime.getRuntime().exec("cmd /c dir"). Ich muss in der Lage sein, das gleiche zu tun mit unix-Befehle: z.B.: ls -la und so weiter. Was soll ich in?

  2. Gibt es eine Möglichkeit zu erinnern, eine shell ist-Zustand?
    Erklärung: wenn ich mit: Runtime.getRuntime().exec("cmd /c dir"), ich bekomme immer eine Liste meiner home-Verzeichnis. Wenn ich Runtime.getRuntime().exec("cmd /c cd <some-folder>") tun, und dann Runtime.getRuntime().exec("cmd /c dir") wieder, ich bekomme noch die Liste meiner home-Ordner. Gibt es eine Möglichkeit zu sagen, den Prozess zu erinnern, dessen Zustand, wie eine normale shell?


Scheint es, dass die bash Befehlszeile vorgeschlagen Paŭlo funktioniert nicht:

C:\cygwin\bin>bash -c ls -la
-la: ls: command not found

Ich habe Schwierigkeiten, herauszufinden, die technischen.

Dies ist mein code:

p = Runtime.getRuntime().exec("C:\\cygwin\\bin\\bash.exe -c ls -la");
reader2 = new BufferedReader(new InputStreamReader(p.getInputStream()));
line = reader2.readLine();

line endet mit einem null-Wert.


Fügte ich diese zu meinem .bash_profile:

#BASH
export BASH_HOME=/cygdrive/c/cygwin
export PATH=$BASH_HOME/bin:$PATH

Habe ich noch folgende als gut:

System Eigenschaften -> erweitert -> Umgebungsvariablen -> Benutzer variebales -> variable: BASH, Wert: c:\cygwin\bin

Immer noch nichts...

Jedoch, wenn ich diese ausführen stattdessen, es funktioniert!

p = Runtime.getRuntime().exec("c:\\cygwin\\bin\\ls -la ~/\"Eclipse_Workspace/RenameScript/files copy\"");
  • Okay, mal sehen. Direkt ausführen der ls.exe scheint zu funktionieren, wenn wir den richtigen Weg.
  • ok, also wie mache ich bash zu erkennen, es bei der Verwendung von -c-argument?
  • Ich denke, bei der Ausführung mit -c es nicht ausgeführt werden Ihren .bashrc. Sie könnten versuchen, den Pfad mit den envp argument exec. (Ich werde hinzufügen, um meine Antwort.)
  • p = Runtime.getRuntime().exec("C:/cygwin/bin/bash -c '/bin/ls -la'"); damit das funktioniert
InformationsquelleAutor Martin Klosi | 2011-07-19
Schreibe einen Kommentar