Główna » jak » 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?

    Podczas tworzenia nowego skryptu powłoki, chcesz się upewnić, że jest on jak najbardziej wolny od problemów, ale czasami może być nieco mylące, aby wiedzieć, który program jest najlepszy do użycia. W tej notatce dzisiejszy post z pytaniami i odpowiedziami 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, opartego na społecznościach grupowania witryn 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 go używać #! / 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, itp. Zawsze będzie kompatybilny sh, nigdy csh lub ryba.
    • 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 (np. 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 też 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.

    Image Credit: Wikipedia