выполнение команд на терминале в Linux через Java - PullRequest
9 голосов
/ 12 ноября 2010

Я создал отдельное приложение, в котором я хочу, чтобы, когда пользователь нажимает кнопку запуска, терминал открывался и на нем выполнялась определенная команда.Я могу успешно открыть терминал, используя следующий код ...

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

Приведенный выше код открывает окно терминала, но я не могу выполнить какую-либо команду для него.Может кто-нибудь сказать мне, как это сделать?

Ответы [ 3 ]

5 голосов
/ 12 ноября 2010

Попробуйте

new ProcessBuilder("xterm", "-e", 
                   "/full/path/to/your/program").start()
4 голосов
/ 05 марта 2013

Выполнить любую команду в Linux как есть, как то, что вы вводите в терминале:

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

}

Использование:

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

или так же сложно, как:

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

String command = "ssh user@database-dev 'pg_dump -U postgres -w -h localhost db1 --schema-only'";
CommandExecutor.execute(command);
2 голосов
/ 17 ноября 2010

Предположим, что вы пытаетесь выполнить команду gedit, затем вам нужно указать полный путь к gedit (например, / usr / bin / gedit). Аналогично для всех остальных команд укажите полный путь.

...