Ik heb een Java-applicatie ontwikkeld. Ik heb de applicatie opgedeeld in 5 subapplicaties en een servicewrapper voor elke subapplicatie gemaakt met shell-scripts:
subaap1/bin/app.sh subaap2/bin/app.sh ...
Nu wil ik een opstartscript maken startup.sh
om alle wrapper-scripts uit te voeren:
#!/bin/bash sh subaap1/bin/app.sh start sh subaap2/bin/app.sh start ...
Maar als ik het uitvoer, krijg ik:
Onverwachte opdracht: start
Hoe kan ik dit oplossen?
Opmerkingen
- Voor zover ik kan nagaan, wordt die fout veroorzaakt door uw applicatie. Welk commando typ je om alleen subaap1 uit te voeren?
Answer
Je zou sh niet moeten gebruiken in uw script om uw subapplicaties uit te voeren.
Gebruik gewoon:
#!/bin/bash subaap1/bin/app.sh start subaap2/bin/app.sh start ...
Bijgewerkt volgens onderstaande opmerkingen:
je versie zou moeten werken, maar je moet weten welke shell sh aanroept. Het kan zijn dat je de verkeerde shell hebt, of dat de machtigingen voor je apps onjuist zijn voor de shell die je probeert te gebruiken.
Opmerkingen
- Weet u het zeker?
bash
zal de argumenten doorgeven aan het script dat u ' loopt (dat ' is waar mijnsh
een symbolische link naar heeft); ik don ' weet niet van andere shells - @Michael – zal het ze doorgeven als je sh gebruikt? Je zou gelijk kunnen hebben – ik ' niet doen Als ik dat wil, zet ik de mijne altijd tussen aanhalingstekens. Of zoals hier, jus t verwijderen sh en bash gaat er graag van uit dat de regel een applicatie is.
- Ik heb geprobeerd
subaap1/bin/app.sh start
uit te voeren vanaf de commandoregel, en het werkt perfect. Nu verander ik het shellscript zondersh
maar ik hebstartup.sh: line 2: subaap1/bin/app.sh: Permission denied
. Enige suggestie meneer? - Ja, ik heb
sh /path/to/shell/script arg
geprobeerd en de arg heeft het gehaald. Het kan echter afhangen van welke shellsh
daadwerkelijk is gelinkt - @Michael – goed punt! sh zou ergens anders heen kunnen gaan dan bash.