Desarrollé una aplicación Java. Dividí la aplicación en 5 sub-aplicaciones y creé un contenedor de servicio para cada sub-aplicación usando scripts de shell:
subaap1/bin/app.sh subaap2/bin/app.sh ...
Ahora quiero crear un script de inicio startup.sh
para ejecutar todos los scripts de envoltura:
#!/bin/bash sh subaap1/bin/app.sh start sh subaap2/bin/app.sh start ...
Pero cuando lo ejecuto, obtengo:
Comando inesperado: inicio
¿Cómo puedo solucionar esto?
Comentarios
- Hasta donde yo sé, ese error proviene de su aplicación. ¿Qué comando escribe para ejecutar subaap1?
Respuesta
No debería necesitar usar sh en su secuencia de comandos para ejecutar sus aplicaciones secundarias.
Simplemente use:
#!/bin/bash subaap1/bin/app.sh start subaap2/bin/app.sh start ...
Actualizado según los comentarios a continuación:
su versión debería funcionar, sin embargo, necesita saber a qué shell llama sh. Puede ser que tenga el shell incorrecto o que los permisos de sus aplicaciones sean incorrectos para el shell que está intentando utilizar.
Comentarios
- ¿Estás seguro?
bash
pasará los argumentos a la secuencia de comandos que ' en ejecución (que ' es a lo que mish
está vinculado simbólicamente); yo no ' no sé acerca de otros shells - @Michael – ¿los pasará si usas sh? Podrías tener razón – simplemente no ' no de esa manera. Siempre rodeo el mío entre comillas si quiero hacer eso. O como aquí, solo t elimine sh y bash está feliz de asumir que la línea es una aplicación.
- He intentado ejecutar
subaap1/bin/app.sh start
desde la línea de comandos, y funciona perfectamente. Ahora cambio el script de shell sinsh
pero obtuvestartup.sh: line 2: subaap1/bin/app.sh: Permission denied
. ¿Alguna sugerencia señor? - Sí, probé
sh /path/to/shell/script arg
y el argumento lo logró. Sin embargo, podría depender de qué shellsh
esté realmente vinculado - @Michael – ¡buen punto! sh podría ir a otro lugar que no sea bash.