Saltar al contenido

Cómo ejecutar un comando de shell usando Java

Cómo ejecutar un comando de shell usando Java

Internet es una parte integral de nuestras vidas, por lo que es importante usarlo de manera consciente y sin riesgos. Conocemos la importancia de los proveedores en línea que permiten búsquedas seguras y una conexión estable. En este artículo, analizaremos de cerca la importancia de los comandos de shell para minimizar la posibilidad de error en su trabajo y cómo ejecutarlos desde el código Java. Hay dos opciones: la primera es la clase Runtime y ese es el método exec, y la segunda es la instancia de ProcessBuilder.

¿Qué es una almeja y por qué es tan importante?

“Para representar una interfaz de línea de comandos, debe usar un programa de computadora llamado. utilizar Manga. Permite a los usuarios controlar su computadora usando comandos ingresados ​​con un teclado. No es necesario controlar las interfaces gráficas de usuario (GUI) con combinaciones de mouse o teclado ”, admite Tom Hayes, diseñador de UX en Essay Tigers.

Razones para usar un caparazón:

  • Puede utilizar muchas herramientas bioinformáticas con la ayuda de una interfaz de línea de comandos y obtener más funcionalidad de la versión de línea de comandos. Por ejemplo, BLAST es accesible para aquellos que saben cómo usar un shell.
  • Con un shell que hace que su trabajo sea menos propenso a errores, evita los mismos errores que causa el trabajo manual repetitivo.
  • Su trabajo se vuelve más reproducible porque su computadora usa un shell para registrar cada uno de sus pasos. Permite a las personas repetir el trabajo si es necesario y contactar a otros para revisar un proceso o aplicar un proceso a nuevos datos.

Runtime.exec ()

Runtime.exec () es una clase simple de alto nivel que actualmente no se puede personalizar, pero que está disponible en cualquier aplicación Java. Le da a la aplicación la capacidad de comunicarse dentro de su entorno. El método exec () se utiliza para ejecutar comandos directamente o para ejecutar archivos .bat / .sh.

try {

// -- Linux --

// Run a shell command
// Process process = Runtime.getRuntime().exec("ls /home/mkyong/");

// Run a shell script
// Process process = Runtime.getRuntime().exec("path/to/hello.sh");

// -- Windows --

// Run a command
//Process process = Runtime.getRuntime().exec("cmd /c dir C:\Users\mkyong");

//Run a bat file
Process process = Runtime.getRuntime().exec(
"cmd /c hello.bat", null, new File("C:\Users\mkyong\"));

StringBuilder output = new StringBuilder();

BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()));

String line;
while ((line = reader.readLine()) != null) {
output.append(line + "n");
}

int exitVal = process.waitFor();
if (exitVal == 0) {
System.out.println("Success!");
System.out.println(output);
System.exit(0);
} else {
//abnormal...
}

} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}

}

Fuente: mkyong.com

Hay variantes del método exec () disponibles:

  • Public Process Exec (comando de cadena) se utiliza para ejecutar el comando dentro de un comando de proceso separado.
  • Public Process Exec (comando de cadena, cadena[] envp), que ejecuta el comando con una matriz de variables de entorno proporcionadas como una matriz de cadenas.
  • Public Process Exec (comando de cadena, cadena[] envp, File dir) ejecuta el comando de variable de entorno especificado desde el directorio dir.
  • ejecutivo de proceso público (String cmdArray[]) se utiliza para ejecutar una serie de comandos de cadenas.
  • ejecutivo de proceso público (String cmdArray[], Cuerda[] envp) puede ejecutar un comando en las variables de un entorno específico.
  • Public Process Exec (String cmdarray[], Cuerda[] envp, File dir), que se utiliza para las variables de entorno especificadas desde el directorio dir.

El intérprete puede ejecutar estos procesos de forma externa y no depende del sistema. Considere el comando String y el String cmdArray[] Apunte a lo mismo y obtenga resultados similares. Puede usar si exec («dir / carpeta», exec (new String[]{«Directorio» o «/ Carpeta»}.

ProcessBuilder

Se prefiere ProcessBuilder al enfoque en tiempo de ejecución debido a su capacidad para personalizar algunos detalles. Permite que el directorio de trabajo cambie un comando de shell en ejecución usando builder.directory (). Y redirige los flujos de entrada y salida a sustituciones personalizadas. Puede utilizar los métodos de ProcessBuilders para obtener una lista de variables de entorno en forma de mapa. Además, establezca variables de entorno para su programa.

ProcessBuilder processBuilder = new ProcessBuilder();

// -- Linux --

// Run a shell command
processBuilder.command("bash", "-c", "ls /home/mkyong/");

// Run a shell script
//processBuilder.command("path/to/hello.sh");

// -- Windows --

// Run a command
//processBuilder.command("cmd.exe", "/c", "dir C:\Users\mkyong");

// Run a bat file
//processBuilder.command("C:\Users\mkyong\hello.bat");

try {

Process process = processBuilder.start();

StringBuilder output = new StringBuilder();

BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()));

String line;
while ((line = reader.readLine()) != null) {
output.append(line + "n");
}

int exitVal = process.waitFor();
if (exitVal == 0) {
System.out.println("Success!");
System.out.println(output);
System.exit(0);
} else {
//abnormal...
}

} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}

Fuente: mkyong.com

graduación

Este breve tutorial muestra que podemos ejecutar un comando de shell en Java de dos formas diferentes. Aquellos que quieran personalizar la ejecución del proceso generado deben utilizar un ProcessBuilder.

Source link