2010-11-12 48 views
9

Tôi đã tạo một ứng dụng độc lập mà tôi muốn khi người dùng nhấp vào nút chạy thì terminal sẽ mở và một lệnh cụ thể sẽ được thực thi trên thiết bị đầu cuối. Tôi có thể mở thiết bị đầu cuối thành công bằng cách sử dụng mã sau ...thực hiện các lệnh trên thiết bị đầu cuối trong linux thông qua java

Process process = null; 
try { 
    process = new ProcessBuilder("xterm").start(); 
} catch (IOException ex) { 
    System.err.println(ex); 
} 

Mã trên mở cửa sổ đầu cuối nhưng tôi không thể thực hiện bất kỳ lệnh nào trên đó. Bất cứ ai có thể cho tôi biết làm thế nào để làm điều đó?

Trả lời

2

Giả sử bạn đang cố gắng lệnh gedit của bạn thì bạn cần phải cung cấp đường dẫn có trình độ đủ để gedit (ví dụ/usr/bin/gedit). Tương tự như vậy cho tất cả các lệnh khác chỉ định đường dẫn đầy đủ.

5

Hãy thử

new ProcessBuilder("xterm", "-e", 
        "/full/path/to/your/program").start() 
+0

Trên thực tế trong thiết bị đầu cuối tôi không muốn chạy một chương trình cụ thể. Tôi cần thực hiện một lệnh cụ thể. Ví dụ, $ gedit trong terminal. –

+0

Không phải là gedit một chương trình? – Kennet

+0

Bằng cách này tôi đã thử tuyên bố trên của bạn cho biết vì lợi ích nhưng nó không hoạt động, thậm chí không phải là thiết bị đầu cuối đang mở. –

4

Execute bất kỳ lệnh trong linux như là, như những gì bạn gõ trong terminal:

import java.io.BufferedReader; 
    import java.io.IOException; 
    import java.io.InputStreamReader; 

    public class CommandExecutor { 
    public static String execute(String command){ 
     StringBuilder sb = new StringBuilder(); 
     String[] commands = new String[]{"/bin/sh","-c", command}; 
     try { 
      Process proc = new ProcessBuilder(commands).start(); 
      BufferedReader stdInput = new BufferedReader(new 
        InputStreamReader(proc.getInputStream())); 

      BufferedReader stdError = new BufferedReader(new 
        InputStreamReader(proc.getErrorStream())); 

      String s = null; 
      while ((s = stdInput.readLine()) != null) { 
       sb.append(s); 
       sb.append("\n"); 
      } 

      while ((s = stdError.readLine()) != null) { 
       sb.append(s); 
       sb.append("\n"); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return sb.toString(); 
    } 

} 

Cách sử dụng:

CommandExecutor.execute("ps ax | grep postgres"); 

hoặc phức tạp như:

CommandExecutor.execute("echo 'hello world' | openssl rsautl -encrypt -inkey public.pem -pubin | openssl enc -base64"); 

String command = "ssh [email protected] 'pg_dump -U postgres -w -h localhost db1 --schema-only'"; 
CommandExecutor.execute(command); 
Các vấn đề liên quan