
Kiedy tworzysz nowy skrypt powłoki, chcesz się upewnić, że jest jak najbardziej bezproblemowy, ale czasami może być trochę mylące, aby wiedzieć, który z nich jest najlepszy do użycia. W tej notatce dzisiejszy post z pytaniami i odpowiedziami dla SuperUser zawiera odpowiedź na pytanie zdezorientowanego czytelnika.
Dzisiejsza sesja pytań i odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser — pododdziału Stack Exchange, społecznościowej grupy witryn internetowych z pytaniami i odpowiedziami.
Pytanie
Czytnik SuperUser Hendre chce wiedzieć, kiedy lepiej używać #!/kosz/bash zamiast #!/kosz/sz w skryptach powłoki:
Kiedy jest bardziej odpowiednie w użyciu? #!/kosz/bash zamiast #!/kosz/sz w skrypcie powłoki?
Kiedy lepiej użyć #!/kosz/bash zamiast #!/kosz/sz w skrypcie powłoki?
Odpowiedź
Grawitacja współtwórcy SuperUser ma dla nas odpowiedź:
W skrócie:
- Istnieje kilka powłok, które implementują nadzbiór Specyfikacja POSIX sh. W różnych systemach, /bin/sz może być linkiem do ash, bash, dash, ksh, zsh itp. Zawsze będzie jednak kompatybilny z sh, nigdy z csh lub fish.
- Dopóki trzymasz się tylko funkcji sh, możesz (a prawdopodobnie nawet powinieneś) używać #!/kosz/sz a skrypt powinien działać poprawnie, bez względu na to, która to powłoka.
- Jeśli zaczynasz używać funkcji specyficznych dla basha (tj. tablic), powinieneś wyraźnie poprosić o bash, ponieważ nawet jeśli /bin/sz już wywołuje bash w twoim systemie, może nie być w systemie wszystkich innych, a twój skrypt nie będzie tam działał. To samo dotyczy oczywiście zsh i ksh.
- Nawet jeśli skrypt jest przeznaczony wyłącznie do użytku osobistego, możesz zauważyć, że niektóre systemy operacyjne się zmieniają /bin/sz podczas aktualizacji. Na przykład w Debianie był to bash, ale później został zastąpiony bardzo minimalnym myślnikiem. Skrypty, które wykorzystywały bashizmy, ale miały #!/kosz/sz nagle się zepsuł.
Jednakże:
- Nawet #!/kosz/bash nie jest poprawne. Na różnych systemach bash może żyć w /usr/bin, /usr/pkg/bin, lub /usr/local/bin.
- Bardziej niezawodną opcją jest #!/usr/bin/env bash, którego używa $PATH. Chociaż samo narzędzie env również nie jest ściśle gwarantowane, /usr/bin/env nadal działa na większej liczbie systemów niż /bin/bash robi.
Masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych doświadczonych technologicznie użytkowników Stack Exchange? Sprawdź pełny wątek dyskusji tutaj.
Źródło obrazu: Wikipedia