Desenvolvi um aplicativo Java. Dividi o aplicativo em 5 subaplicativos e criei um wrapper de serviço para cada subaplicativo usando scripts de shell:
subaap1/bin/app.sh subaap2/bin/app.sh ...
Agora, quero criar um script de inicialização startup.sh
para executar todos os scripts de wrapper:
#!/bin/bash sh subaap1/bin/app.sh start sh subaap2/bin/app.sh start ...
Mas quando o executo, obtenho:
Comando inesperado: start
Como posso corrigir isso?
Comentários
- Pelo que eu posso dizer, esse erro está vindo de seu aplicativo. Que comando você digita para apenas executar subaap1?
Resposta
Você não deveria precisar usar sh em seu script para executar seus subaplicativos.
Basta usar:
#!/bin/bash subaap1/bin/app.sh start subaap2/bin/app.sh start ...
Atualizado de acordo com os comentários abaixo:
sua versão deve funcionar, mas você precisa saber qual shell sh está chamando. Pode ser que você tenha o shell errado ou as permissões em seus aplicativos estão incorretas para o shell que você está tentando usar.
Comentários
- Tem certeza?
bash
irá passar os argumentos para o script que você ' em execução (isso ' é o que meush
está vinculado ao símbolo); Eu não ' conheço outros shells - @Michael – ele os passará se você usar sh? Você pode estar certo – eu simplesmente não ' não faço assim. Sempre coloco as minhas entre aspas, se quiser. Ou, como aqui, apenas t remova sh e bash fica feliz em assumir que a linha é um aplicativo.
- Eu tentei executar
subaap1/bin/app.sh start
na linha de comando e funciona perfeitamente. Agora mudo o script de shell semsh
, mas obtivestartup.sh: line 2: subaap1/bin/app.sh: Permission denied
. Alguma sugestão, senhor? - Sim, tentei
sh /path/to/shell/script arg
e o argumento passou. Pode depender de qual shellsh
está realmente vinculado, embora - @Michael – bom ponto! sh poderia ir para outro lugar que não bash.