If-Koubou

Kiedy lepiej używać #! / Bin / bash Zamiast #! / Bin / sh w skrypcie powłoki?

Kiedy lepiej używać #! / Bin / bash Zamiast #! / Bin / sh w skrypcie powłoki? (Jak)

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.

Pytanie

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?

Odpowiedź

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