Stworzyłem aplikację w języku Java. Podzieliłem aplikację na 5 aplikacji podrzędnych i utworzyłem opakowanie usługi dla każdej aplikacji podrzędnej za pomocą skryptów powłoki:
subaap1/bin/app.sh subaap2/bin/app.sh ...
Teraz chcę utworzyć skrypt startowy startup.sh
, aby wykonać wszystkie skrypty opakowania:
#!/bin/bash sh subaap1/bin/app.sh start sh subaap2/bin/app.sh start ...
Ale kiedy go uruchomię, otrzymuję:
Nieoczekiwane polecenie: start
Jak mogę to naprawić?
Komentarze
- O ile wiem, ten błąd pochodzi z Twojej aplikacji. Jakie polecenie wpisujesz, aby po prostu uruchomić subaap1?
Odpowiedź
Nie należy używać sh w skrypt do uruchamiania aplikacji podrzędnych.
Po prostu użyj:
#!/bin/bash subaap1/bin/app.sh start subaap2/bin/app.sh start ...
Zaktualizowano zgodnie z poniższymi komentarzami:
Twoja wersja powinna działać, ale musisz wiedzieć, którą powłokę wywołuje sh. Możliwe, że masz niewłaściwą powłokę lub uprawnienia aplikacji są nieprawidłowe dla powłoki, której próbujesz użyć.
Komentarze
- Czy na pewno?
bash
przekaże argumenty do skryptu, który ' działa (to ' jest tym, do czego mojesh
jest dowiązane symbolicznie); Nie ' nie wiem o innych powłokach - @Michael – czy przejdzie przez nie, jeśli użyjesz sh? Możesz mieć rację – po prostu nie ' nie Jeśli chcę to zrobić, zawsze otaczam je cudzysłowami, albo jak tutaj, jus t usuń sh, a bash z przyjemnością zakłada, że ta linia jest aplikacją.
- Próbowałem wykonać
subaap1/bin/app.sh start
z wiersza poleceń i działa idealnie. Teraz zmieniłem skrypt powłoki bezsh
, ale otrzymałemstartup.sh: line 2: subaap1/bin/app.sh: Permission denied
. Masz jakieś sugestie? - Tak, próbowałem
sh /path/to/shell/script arg
i udało się. Może to zależeć od tego, do której powłokish
jest faktycznie dowiązana - @Michael – dobra uwaga! sh mógłby iść gdzieś indziej niż bash.