staram się osiągnąć dwie rzeczy:Jak wykonać UNIX poprzez Windows/Cygwin używając Java
Używam Cygwin na Windows7 do wykonywania moich poleceń powłoki UNIX i muszę zautomatyzować proces pisząc aplikacja Java. Już wiem, jak używać powłoki systemu Windows przez Javę, używając "klasy procesowej" i
Runtime.getRuntime().exec("cmd /c dir")
. Muszę być w stanie zrobić to samo z poleceniami unix: tj.ls -la
i tak dalej. Na co powinienem zaglądać?Czy istnieje sposób na zapamiętanie stanu muszli? wyjaśnienie: kiedy używam:
Runtime.getRuntime().exec("cmd /c dir")
, zawsze otrzymuję listę mojego katalogu domowego. Jeśli wykonamRuntime.getRuntime().exec("cmd /c cd <some-folder>")
, a następnie ponownie zrobięRuntime.getRuntime().exec("cmd /c dir")
, nadal otrzymam listę mojego katalogu domowego. Czy istnieje sposób, aby powiedzieć procesowi, aby pamiętał jego stan, jak zwykła powłoka?
Wydaje się, że linia poleceń bash
proponowany przez Paulo nie działa:
C:\cygwin\bin>bash -c ls -la
-la: ls: command not found
Mam problemy ze zorientowaniem się szczegóły techniczne.
To jest mój kod:
p = Runtime.getRuntime().exec("C:\\cygwin\\bin\\bash.exe -c ls -la");
reader2 = new BufferedReader(new InputStreamReader(p.getInputStream()));
line = reader2.readLine();
line
kończy się o wartość null.
Dodałem to do mojego bash_profile:
#BASH
export BASH_HOME=/cygdrive/c/cygwin
export PATH=$BASH_HOME/bin:$PATH
Dodałem także następujące:
Właściwości systemu -> Zaawansowane -> Zmienne Środowiska -> użytkownik variebales -> zmienna:
BASH
, wartość:c:\cygwin\bin
Jeszcze nic ...
Jeśli jednak wykonam to zamiast tego, działa!
p = Runtime.getRuntime().exec("c:\\cygwin\\bin\\ls -la ~/\"Eclipse_Workspace/RenameScript/files copy\"");
Dobra, zobaczmy. Bezpośrednie wykonanie 'ls.exe' wydaje się działać, jeśli damy właściwą ścieżkę. –
ok, jak mogę sprawić, aby bash rozpoznał go przy użyciu argumentu -c? –
Myślę, że podczas wykonywania z '-c', nie wykonuje twojego' .bashrc'. Możesz spróbować ustawić ścieżkę z argumentem 'envp' na' exec'. (Dodam do mojej odpowiedzi.) –