Es bastante simple ejecutar un comando Unix desde Java.
Runtime.getRuntime().exec(myCommand);
Pero, ¿es posible ejecutar un script de shell Unix a partir del código Java? En caso afirmativo, ¿sería una buena práctica ejecutar un script de shell desde el código Java?
Respuestas:
Realmente deberías mirar Process Builder . Realmente está construido para este tipo de cosas.
fuente
También puede usar la biblioteca ejecutiva de Apache Commons .
Ejemplo:
Para mayor referencia, también se ofrece un ejemplo en Apache Doc .
fuente
OutputStream
paraDefaultExecuter
usarDefaultExecuter.setStreamHandler
método para la producción de captura enOutputStream
. Consulte este hilo para obtener más información: ¿Cómo puedo capturar la salida de un comando ...Diría que no está en el espíritu de Java ejecutar un script de shell desde Java. Java está destinado a ser multiplataforma, y ejecutar un script de shell limitaría su uso solo a UNIX.
Dicho esto, definitivamente es posible ejecutar un script de shell desde Java. Usaría exactamente la misma sintaxis que enumeró (no lo he intentado yo mismo, pero intente ejecutar el script de shell directamente, y si eso no funciona, ejecute el shell en sí mismo, pasando el script como un parámetro de línea de comando) .
fuente
switches
yif
declaraciones para evitar todos los matices que no funcionan exactamente igual en diferentes plataformas a pesar de los mejores esfuerzos de las personas que crearon las bibliotecas centrales de Java.Creo que has respondido tu propia pregunta con
En cuanto a si es una buena práctica ... ¿qué está tratando de hacer con un script de shell que no puede hacer con Java?
fuente
Sí, es posible hacerlo. Esto funcionó para mí.
fuente
Aquí está mi ejemplo. Espero que tenga sentido.
fuente
¡Sí, es posible y lo has respondido! Acerca de las buenas prácticas, creo que es mejor iniciar comandos desde archivos y no directamente desde su código. Así que hay que hacer de Java ejecutar la lista de comandos (o un comando) en un existentes
.bat
,.sh
,.ksh
... archivos. Aquí hay un ejemplo de ejecución de una lista de comandos en un archivoMyFile.sh
:fuente
Para evitar tener que codificar una ruta absoluta, puede usar el siguiente método que buscará y ejecutará su script si está en su directorio raíz.
fuente
En cuanto a mí, todas las cosas deben ser simples. Para ejecutar el script solo necesito ejecutar
fuente
La biblioteca ZT Process Executor es una alternativa a Apache Commons Exec. Tiene funcionalidad para ejecutar comandos, capturar su salida, establecer tiempos de espera, etc.
Todavía no lo he usado, pero se ve razonablemente bien documentado.
Un ejemplo de la documentación: ejecutar un comando, bombear el stderr a un registrador y devolver la salida como una cadena UTF8.
Su documentación enumera las siguientes ventajas sobre Commons Exec:
fuente
Aquí hay un ejemplo de cómo ejecutar un script Unix bash o Windows bat / cmd desde Java. Se pueden pasar argumentos en el script y la salida recibida del script. El método acepta un número arbitrario de argumentos.
Cuando se ejecuta en Unix / Linux, la ruta debe ser similar a Unix (con '/' como separador), cuando se ejecuta en Windows: use '\'. Hier es un ejemplo de un script bash (test.sh) que recibe un número arbitrario de argumentos y duplica cada argumento:
Cuando llame
en Unix / Linux, el resultado es:
Hier es un simple script de Windows cmd test.cmd que cuenta el número de argumentos de entrada:
Al llamar al script en Windows
La salida es
fuente
Es posible, simplemente ejecútelo como cualquier otro programa. ¡Solo asegúrate de que tu script tenga el # correcto! (she-bang) como la primera línea del script y asegúrese de que haya permisos de ejecución en el archivo.
Por ejemplo, si se trata de un script bash, coloque #! / Bin / bash en la parte superior del script, también chmod + x.
También en cuanto a si es una buena práctica, no, no lo es, especialmente para Java, pero si le ahorra mucho tiempo portar un script grande y no le pagan extra por hacerlo;) ahorre tiempo, ejecute el script, y ponga el portado a Java en su lista de tareas a largo plazo.
fuente
fuente
Esta es una respuesta tardía. Sin embargo, pensé en poner la lucha que tuve que soportar para ejecutar un script de shell desde una aplicación Spring-Boot para futuros desarrolladores.
Estaba trabajando en Spring-Boot y no pude encontrar el archivo que se ejecutaba desde mi aplicación Java y se estaba lanzando
FileNotFoundFoundException
. Tuve que mantener el archivo en elresources
directorio y tuve que configurar el archivo para que se escanearapom.xml
mientras la aplicación se iniciaba de la siguiente manera.error code = 13, Permission Denied
. Luego tuve que hacer que el archivo fuera ejecutable ejecutando este comando:chmod u+x myShellScript.sh
Finalmente, podría ejecutar el archivo usando el siguiente fragmento de código.
Espero que eso resuelva el problema de alguien.
fuente
Justo lo mismo que Solaris 5.10 funciona así,
./batchstart.sh
hay un truco que no sé si su sistema operativo acepta\\. batchstart.sh
. Esta doble barra puede ayudar.fuente
Pienso con
La comprobación del sistema operativo puede administrar los scripts de shell / bash si son compatibles. si es necesario que el código sea portátil.
fuente
para uso de linux
y para uso;
O
fuente