2011-09-30 13 views
8

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?

+0

Możesz uzyskać odpowiedź tutaj, ale czy próbowałeś? – jman

Odpowiedz

10

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.

10

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.

+1

... lub kiedy źródło skryptu :) –

+1

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) –

1

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.

Powiązane problemy