Tôi cố gắng để đạt được hai điều:Làm thế nào để thực hiện unix lệnh thông qua Windows/Cygwin sử dụng Java
Tôi đang chạy Cygwin trên Windows7 để thực hiện các lệnh shell unix tôi và tôi cần để tự động hóa quá trình bằng cách viết một ứng dụng Java. Tôi đã biết cách sử dụng vỏ cửa sổ thông qua Java bằng cách sử dụng 'Process class' và
Runtime.getRuntime().exec("cmd /c dir")
. Tôi cần có khả năng thực hiện tương tự với các lệnh unix: ví dụ:ls -la
và v.v. Tôi nên xem xét điều gì?Có cách nào để ghi nhớ trạng thái của trình bao không? giải thích: khi tôi sử dụng:
Runtime.getRuntime().exec("cmd /c dir")
, tôi luôn nhận được danh sách thư mục chính của mình. Nếu tôi làmRuntime.getRuntime().exec("cmd /c cd <some-folder>")
và sau đó thực hiện lạiRuntime.getRuntime().exec("cmd /c dir")
, tôi vẫn sẽ nhận được danh sách thư mục chính của mình. Có cách nào để nói cho quá trình nhớ trạng thái của nó, giống như một vỏ thông thường không?
Dường như dòng bash
lệnh bằng Paulo đề xuất không hoạt động:
C:\cygwin\bin>bash -c ls -la
-la: ls: command not found
tôi đang gặp khó khăn để tìm ra các technicalities.
Đây là mã của tôi:
p = Runtime.getRuntime().exec("C:\\cygwin\\bin\\bash.exe -c ls -la");
reader2 = new BufferedReader(new InputStreamReader(p.getInputStream()));
line = reader2.readLine();
line
rốt cục sẽ có một giá trị null.
tôi thêm này để .bash_profile của tôi:
#BASH
export BASH_HOME=/cygdrive/c/cygwin
export PATH=$BASH_HOME/bin:$PATH
tôi thêm vào sau cũng như:
System Properties -> Advanced -> biến Môi trường -> user variebales -> biến:
BASH
, giá trị:c:\cygwin\bin
Vẫn không có gì ...
Tuy nhiên, nếu tôi thực hiện thay vào đó, nó hoạt động!
p = Runtime.getRuntime().exec("c:\\cygwin\\bin\\ls -la ~/\"Eclipse_Workspace/RenameScript/files copy\"");
OK, hãy xem. Trực tiếp thực thi 'ls.exe' dường như hoạt động, nếu chúng ta đưa ra đường dẫn đúng. –
ok, vậy làm thế nào để làm cho bash nhận ra nó khi sử dụng đối số -c? –
Tôi nghĩ khi thực hiện với '-c', nó không thực thi' .bashrc' của bạn. Bạn có thể thử đặt đường dẫn với đối số 'envp' thành' exec'. (Tôi sẽ thêm vào câu trả lời của mình.) –