Ejercicio: llamar desde Kotlin a un proceso en Linux con un script en Bash
- Crea un archivo llamado
script.shcon el siguiente contenido:
[crayon-6a618816dcf32426917014/]
- En Kotlin, puedes usar la clase
ProcessBuilderpara ejecutar el script en Bash. Asegúrate de tener el archivoscript.shen la misma ubicación que tu código Kotlin.
[crayon-6a618816dcf38723854955/]
Este código en Kotlin utiliza la clase ProcessBuilder para ejecutar un script de shell (script.sh) con un argumento desde un programa Kotlin, y luego captura e imprime la salida del script. A continuación, se explica el código línea por línea:
- Importación de la clase
File:import java.io.FileSe importa la claseFilede la biblioteca estándar de Java, que se utiliza para manejar archivos. - Función principal
main:fun main() {Se define la funciónmain, que es el punto de entrada del programa. - Creación del objeto
Filepara el script:val scriptFile = File("script.sh")Se crea un objetoFileque representa el archivo del script (script.sh). Esto asume quescript.shestá en el mismo directorio desde donde se ejecuta el programa. - Definición del comando a ejecutar:
val command = "bash ${scriptFile.absolutePath} argumento"Se define una cadena de caracterescommandque contiene el comando a ejecutar. Utilizabashpara ejecutar el script de shell con su ruta absoluta y le pasa un argumento (argumento). - Creación del
ProcessBuilder:val processBuilder = ProcessBuilder("/bin/bash", "-c", command)Se crea un objetoProcessBuilderpara ejecutar el comando definido. El comando se ejecuta utilizando/bin/bashcon la opción-c, que permite ejecutar un comando en forma de cadena de caracteres. - Redirección del flujo de errores:
processBuilder.redirectErrorStream(true)Se configura elProcessBuilderpara redirigir el flujo de errores estándar (stderr) al flujo de salida estándar (stdout). Esto significa que cualquier error producido por el script se incluirá en la salida capturada. - Inicio del proceso:
val process = processBuilder.start()Se inicia el proceso utilizando elProcessBuilder. - Esperar a que el proceso termine:
process.waitFor()Se espera a que el proceso termine antes de continuar. Esto asegura que el programa principal no continúe antes de que el proceso hijo haya completado su ejecución. - Captura de la salida del proceso:
val output = process.inputStream.bufferedReader().readText()Se lee la salida del proceso desde el flujo de entrada (inputStream) del proceso. Utiliza unBufferedReaderpara leer el texto completo de la salida. - Imprimir la salida:
println(output)Se imprime la salida capturada del script.