30Jul
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 SuperUser Q & A ma odpowiedź na pomieszane pytanie czytelnika.
Dzisiejsze pytanie &Sesja odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser - poddziału Stack Exchange, opartego na społecznościach grupy Q & A.
Pytanie
Czytnik SuperUser Hendre chce wiedzieć, kiedy lepiej używać #!/bin/ bash zamiast #!/bin/ sh w skryptach powłoki:
Kiedy lepiej użyć #!/bin/ bash zamiast #!/bin/ sh w skrypcie powłoki?
Kiedy lepiej używać #!/bin/ bash zamiast #!/bin/ sh w skrypcie powłoki?
Odpowiedź
SuperUser współpracownik grawity ma odpowiedź dla nas:
W skrócie:
- Istnieje kilka powłok, które implementują nadzbiór specyfikacji POSIX sh. Na różnych systemach /bin/ sh może być łączem do ash, bash, dash, ksh, zsh itd. Zawsze będzie kompatybilny z sh, nigdy csh lub fish.
- Dopóki używasz tylko funkcji sh, możesz( i prawdopodobnie nawet powinieneś) używać #!/bin/ sh i skrypt powinien działać poprawnie, bez względu na to, która to powłoka.
- Jeśli zaczniesz używać specyficznych dla basha funkcji( np. Tablic), powinieneś konkretnie zażądać bash, ponieważ nawet jeśli /bin/ sh wywoła już bash w twoim systemie, może nie działać na wszystkich systemach, 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 zmieniają /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:
- Nawet #!/bin/ bash nie jest poprawny. W 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óry używa $ PATH .Chociaż samo narzędzie env też nie jest zagwarantowane, /usr/bin/ env nadal działa na więcej systemów niż bash /bin/ .
Czy chcesz coś dodać 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.
Image Credit: Wikipedia