- Crea un archivo llamado
script.sh
con el siguiente contenido:
1 2 3 4 |
#!/bin/bash echo "¡Hola desde el script en Bash!" echo "Argumento recibido: $1" |
- En Kotlin, puedes usar la clase
ProcessBuilder
para ejecutar el script en Bash. Asegúrate de tener el archivoscript.sh
en la misma ubicación que tu código Kotlin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import java.io.File fun main() { val scriptFile = File("script.sh") val command = "bash ${scriptFile.absolutePath} argumento" val processBuilder = ProcessBuilder("/bin/bash", "-c", command) processBuilder.redirectErrorStream(true) val process = processBuilder.start() process.waitFor() val output = process.inputStream.bufferedReader().readText() println(output) } |
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.File
Se importa la claseFile
de 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
File
para el script:val scriptFile = File("script.sh")
Se crea un objetoFile
que representa el archivo del script (script.sh
). Esto asume quescript.sh
está 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 caracterescommand
que contiene el comando a ejecutar. Utilizabash
para 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 objetoProcessBuilder
para ejecutar el comando definido. El comando se ejecuta utilizando/bin/bash
con 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 elProcessBuilder
para 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 unBufferedReader
para leer el texto completo de la salida. - Imprimir la salida:
println(output)
Se imprime la salida capturada del script.