Załóżmy, że masz skrypt B Bash, który pozyskujesz z innego skryptu Bash. B ma wiele definicji zmiennych i funkcji. A jest głównym skryptem sterownika. Czy potrzebujesz linii #!/Bin/bash na górze A i B? Co się stanie, jeśli to zrobisz, a jeśli nie?Potrzebujesz shebang we wszystkich skryptach basha?
Odpowiedz
Shebang jest obowiązkowy tylko dla tych skryptów, które będą wykonywane przez system operacyjny w taki sam sposób jak pliki binarne. Jeśli źródło pochodzi z innego skryptu, to shebang jest ignorowany.
Z drugiej strony. JEŚLI skrypt ma być pozyskiwany, wówczas konwencją NIE jest umieszczanie żadnego zwiastuna na początku.
Shebang jest używany, jeśli skrypt zostanie uruchomiony bezpośrednio jako plik wykonywalny (na przykład komendą ./script.sh
). W tym przypadku informuje system operacyjny, który ma być uruchamiany.
Nie jest to wymagane i nie ma żadnego efektu, jeśli na przykład napiszesz bash ./script.sh
lub zeskanuj skrypt.
... lub kiedy źródło skryptu :) –
Nie jest również wymagane, jeśli już jesteś w wierszu bash - zakłada, że skryptem będzie bash (i inne powłoki zwykle zakładają, że skrypty są również dla nich) –
Powinieneś używać shebang we wszystkich skryptach, szczególnie tych, które używają funkcji niezgodnych z sh.
Na przykład w Debianie domyślną powłoką jest myślnik (nie bash). Jeśli używasz funkcji bash-only i nie określasz, że ten skrypt powinien być interpretowany przez bash, może się to nie udać nawet na Linuksie. Z całą pewnością zawiedzie w Solaris lub HP-UX.
Jeśli twój plik ma być tylko źródłowy przez inny skrypt, możesz pominąć wiersz shebang, ale nie ustawiaj uprawnień do wykonywania. Również dla takich plików dobrze jest zachować zgodność z/bin/sh.
Zdecydowanie polecam przeczytać DashAsBinSh.
- 1. Bash opcja shebang -l
- 2. grep we wszystkich katalogach
- 3. Python: Czytanie wszystkich plików we wszystkich katalogach
- 4. Znajdź typy we wszystkich złożeniach
- 5. Funkcje anonimowe w skryptach powłoki
- 6. shebang wskazując na skrypcie (także mając shebang) są skutecznie ignorowane
- 7. linia shebang nie działa
- 8. Lista wszystkich zatwierdzeń (we wszystkich gałęziach) dla danego pliku
- 9. Wyróżnianie obiektów TODO we wszystkich trybach programowania
- 10. Szyny Zmienna we wszystkich działaniach kontrolera
- 11. zastępczy nie działa poprawnie we wszystkich przeglądarkach
- 12. Mysql - znajdź tabelę we wszystkich bazach danych
- 13. AdMob we wszystkich moich kontrolerach widoku?
- 14. Zastąp ciąg we wszystkich plikach w Eclipse
- 15. Jak włączyć wszystkie produkty we wszystkich sklepach?
- 16. Ciągłe, zapętlone, przewijane treści we wszystkich kierunkach
- 17. Ograniczenia typu we wszystkich instancjach rodzinnych typów
- 18. NetBeans i stop/break we wszystkich wyjątkach?
- 19. Django: Wymuszanie tokenu CSRF we wszystkich odpowiedziach
- 20. Python: zwyczaj rejestrowania we wszystkich modułach
- 21. Sprawdzanie pola we wszystkich wystąpieniach zrzutów pamięci
- 22. Problem jQuery .load() we wszystkich wersjach IE
- 23. Jak wyzwalać zdarzenia we wszystkich elementach?
- 24. Gitignore wykluczyć niektóre pliki we wszystkich podkatalogach
- 25. toLocaleString() nie jest obsługiwany we wszystkich przeglądarkach?
- 26. Ukrywanie paska adresu we wszystkich przeglądarkach
- 27. edytuj plik we wszystkich zatwierdzeniach w git
- 28. Odświeżanie danych we wszystkich instancjach Azure
- 29. CSS: Wyłącz ligatury czcionek we wszystkich przeglądarkach
- 30. "[]" vs. "[[]]" w powłoce Basha
Możesz uzyskać odpowiedź tutaj, ale czy próbowałeś? – jman