Wann ist es besser, #! / Bin / bash anstelle von #! / Bin / sh in einem Shell-Skript zu verwenden?
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 dank 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 anstatt #! / bin / sh in Shell-Skripten:
Wann ist es sinnvoller zu verwenden #! / bin / bash eher, als #! / bin / sh in einem Shell-Skript?
Wann ist es besser zu benutzen #! / bin / bash anstatt #! / bin / sh in einem Shell-Skript?
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, / bin / sh Es könnte ein Link zu ash, bash, dash, ksh, zsh usw. sein. Es wird jedoch immer sh-kompatibel sein, niemals csh oder fish.
- Solange Sie sich nur an die Funktionen von sh halten, können (und sollten es wahrscheinlich auch) #! / bin / sh und das Skript sollte gut funktionieren, egal welche Shell es ist.
- Wenn Sie anfangen, bash-spezifische Funktionen (d. H. Arrays) zu verwenden, sollten Sie unbedingt bash anfordern, selbst wenn / bin / sh ruft bereits bash auf Ihrem System auf, es wird möglicherweise nicht auf allen anderen Systemen 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 sich einige Betriebssysteme ändern / bin / sh während Upgrades. Auf Debian war dies zum Beispiel bash, wurde aber später durch den sehr geringen Strich ersetzt. Skripte, die Basismen benutzt hatten, aber hatten #! / bin / sh plötzlich kaputt.
Jedoch:
- Sogar #! / bin / bash ist das nicht richtig. Auf verschiedenen Systemen kann Bash in leben / usr / bin, / usr / pkg / bin, oder / usr / local / bin.
- Eine zuverlässigere Option ist #! / usr / bin / env bash, welche verwendet $ PATH. Obwohl das env-Tool selbst nicht streng garantiert ist, / usr / bin / env funktioniert immer noch auf mehr Systemen als / bin / bash tut.
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.
Bildnachweis: Wikipedia