Há muito tempo o sistema operacional Linux se tornou o principal SO rodando em servidores corporativos. Considerando a importância dessa plataforma e o número elevado de soluções rodando sob o Linux, é comum aparecerem diversas necessidades em termos de integração para execução de comandos no Linux a partir de alguma ferramenta de implementação.
Recentemente fui pego pela necessidade de, a partir de um programa desenvolvido em Java, executar comandos no Linux a partir desse programa. No meu caso, o programa Java tinha que enviar e-mails, mas deveria utilizar o Linux para isso, por meio do comando mailx.
A princípio parece uma tarefa complexa, mas executar um comando no Linux vindo de um programa Java é uma tarefa relativamente simples que pode ser realizada com poucas linhas de código. As linhas de código a seguir ilustram como executar comandos no Linux a partir de um programa Java.
Explicando o exemplo em poucas palavras, o comando “ls ~” é executado e tem o seu resultado impresso no console. O while da linha 32 é utilizado para mostrar o resultado da execução do comando. O método main cria uma instância da classe LocalShell e passa o comando para ser executado no formato de String. Qualquer comando do Linux poderia ser enviado para execução. As classes Process e ProcessBuilder são utilizadas para criação de processos do sistema operacional e fazem parte do pacote java.lang.
import java.io.BufferedReader; import java.io.Closeable; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; public class LocalShell { //execução do comando ls no Linux public static void main(String[] args) throws IOException { final LocalShell shell = new LocalShell(); shell.executeCommand("ls ~"); } public void executeCommand(final String command) throws IOException { final ArrayList<String> commands = new ArrayList<String>(); commands.add("/bin/bash"); commands.add("-c"); commands.add(command); BufferedReader br = null; try { final ProcessBuilder p = new ProcessBuilder(commands); final Process process = p.start(); final InputStream is = process.getInputStream(); final InputStreamReader isr = new InputStreamReader(is); br = new BufferedReader(isr); String line; while ((line = br.readLine()) != null) { System.out.println("Retorno do comando = [" + line + "]"); } } catch (Exception e) { e.printStackTrace(); } finally { secureClose(br); } } private void secureClose(final Closeable resource) { try { if (resource != null) { resource.close(); } } catch (Exception e) { e.printStackTrace(); } } }
Muito interessante. Você teria o código completo pra usar alguns comandos do linux? Tenho que fazer um trabalho de faculdade exatamente sobre isso, executando comandos do linux no terminalzinho dentro do java mesmo. Se puder me disponibilzar ou dar algumas dicas eu agradeceria muito. Abraço!