loader

Wann ist es besser, #! / Bin / bash anstelle von #! / Bin / sh in einem Shell-Skript zu verwenden?

Anonim

Wenn Sie ein neues Shell-Skript erstellen, möchten Sie sicherstellen, dass es so problemlos wie möglich ist. Manchmal kann es jedoch etwas verwirrend sein, zu wissen, welches Shebang das Beste ist, das Sie verwenden können. In diesem Zusammenhang hat der heutige Q & A-Beitrag von SuperUser die Antwort auf die Frage eines verwirrten Lesers.

Die heutige Question & Answer-Sitzung wird von SuperUser zur Verfügung gestellt - einer Unterteilung von Stack Exchange, einer Community-basierten Gruppierung von Q & A-Websites.

Die Frage

SuperUser-Leser Hendre möchte wissen, wann es besser ist, #! / Bin / bash anstelle von #! / Bin / sh in Shellskripten zu verwenden:

Wann ist es sinnvoller, #! / Bin / bash anstelle von #! / Bin / sh in einem Shell-Skript zu verwenden?

Wann ist es besser, #! / Bin / bash anstelle von #! / Bin / sh in einem Shell-Skript zu verwenden?

Die Antwort

Superuser-Mitwirkende grawity hat die Antwort für uns:

Zusamenfassend:

  • Es gibt mehrere Shells, die eine Obermenge der POSIX sh-Spezifikation implementieren. Auf verschiedenen Systemen ist / bin / sh möglicherweise ein Link zu ash, bash, dash, ksh, zsh usw. Es wird jedoch immer sh-kompatibel sein, niemals csh oder fish.
  • Solange Sie sich nur an sh-Features halten, können Sie (und sollten dies wahrscheinlich auch) #! / Bin / sh verwenden, und das Skript sollte einwandfrei funktionieren, egal welche Shell es ist.
  • Wenn Sie anfangen, bash-spezifische Funktionen (z. B. Arrays) zu verwenden, sollten Sie ausdrücklich bash anfragen, denn auch wenn / bin / sh bereits bash auf Ihrem System aufruft, wird dies möglicherweise nicht auf jedem anderen System ausgeführt und Ihr Skript wird dort nicht ausgeführt. Gleiches gilt natürlich auch für zsh und ksh.
  • Selbst wenn das Skript nur für den persönlichen Gebrauch bestimmt ist, stellen Sie möglicherweise fest, dass einige Betriebssysteme / bin / sh während eines Upgrades ändern. Auf Debian war dies zum Beispiel bash, wurde aber später durch den sehr geringen Strich ersetzt. Skripte, die Bashismen verwendeten, aber #! / Bin / sh hatten, brachen plötzlich zusammen.

Jedoch:

  • Sogar #! / Bin / bash ist nicht so richtig. Auf verschiedenen Systemen kann bash in / usr / bin, / usr / pkg / bin oder / usr / local / bin leben .
  • Eine zuverlässigere Option ist #! / Usr / bin / env bash, die $ PATH verwendet . Obwohl das env-Tool selbst nicht streng garantiert ist, funktioniert / usr / bin / env auf noch mehr Systemen als / bin / bash .


Haben Sie der Erklärung etwas hinzuzufügen? Sound off in den Kommentaren. Möchten Sie mehr Antworten von anderen technisch versierten Stack Exchange-Benutzern lesen? Hier geht es zum vollständigen Diskussionsthread.