Podczas tworzenia nowego skryptu powłoki, chcesz się upewnić, że jest on tak wolny jak to tylko możliwe, ale czasami może być trochę mylące wiedzieć, który program jest najlepszy do użycia. W tej notatce dzisiejszy post pytań i odpowiedzi dla SuperUser zawiera odpowiedź na pytanie zagubionego czytelnika.
Dzisiejsza sesja pytań i odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser - poddziału Stack Exchange, społecznościowego forum z pytaniami i odpowiedziami.
Czytnik SuperUser Hendre chce wiedzieć, kiedy lepiej go używać #! / bin / bash zamiast #! / bin / sh w skryptach powłoki:
Kiedy jest bardziej odpowiedni do użycia #! / bin / bash zamiast #! / bin / sh w skrypcie powłoki?
Kiedy lepiej użyć? #! / bin / bash zamiast #! / bin / sh w skrypcie powłoki?
Nadawca SuperUser ma dla nas odpowiedź:
W skrócie:
- Istnieje kilka powłok, które implementują nadzbiór specyfikacji POSIX sh. W różnych systemach / bin / sh może być linkiem do ash, bash, dash, ksh, zsh itd. Zawsze będzie kompatybilny sh, nigdy csh lub fish.
- Dopóki używasz tylko funkcji sh, możesz (i prawdopodobnie nawet powinien) korzystać #! / bin / sh i skrypt powinien działać dobrze, bez względu na to, która to powłoka.
- Jeśli zaczniesz używać funkcji specyficznych dla basha (tj. Tablic), powinieneś konkretnie żądać bashu, ponieważ, nawet jeśli / bin / sh już wywołuje bash w twoim systemie, może nie na systemie wszystkich innych, a twój skrypt nie będzie tam działać. To samo dotyczy zsh i ksh, oczywiście.
- Nawet jeśli skrypt jest przeznaczony wyłącznie do użytku osobistego, możesz zauważyć, że niektóre systemy operacyjne ulegają zmianie / bin / sh podczas aktualizacji. Na przykład w Debianie był to bash, ale później został zastąpiony bardzo minimalnym myślnikiem. Skrypty, które używały bashisms ale miały #! / bin / sh nagle się zepsuł.
Jednak:
- Parzysty #! / bin / bash nie jest to prawda. W różnych systemach bash może żyć / usr / bin, / usr / pkg / bin, lub / usr / local / bin.
- Bardziej niezawodną opcją jest #! / usr / bin / env bash, który używa $ PATH. Chociaż samo narzędzie env również nie jest ściśle zagwarantowane, / usr / bin / env nadal działa na więcej systemów niż / bin / bash robi.
Czy masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych użytkowników Stack Exchange, którzy znają się na technologii? Sprawdź cały wątek dyskusji tutaj.
Źródło grafiki: Wikipedia