Was ist der bevorzugte Bash Shebang?

Gibt es irgendeinen Bash Shebang für die meisten Zwecke objektiv besser als die anderen?

  • #!/usr/bin/env bash
  • #!/bin/bash
  • #!/bin/sh
  • #!/bin/sh -
  • etc

Ich erinnere mich vage daran, dass vor langer Zeit zu hören war, dass das Hinzufügen eines Bindestrichs zum Ende verhindert, dass jemand einen Befehl an das Skript weitergibt, kann aber keine Details dazu finden.

   

    Sie sollten #!/usr/bin/env bash für Portabilität verwenden : verschiedene * nixes setzen bash an verschiedenen Stellen, und die Verwendung von /usr/bin/env ist ein Workaround, um die erste bash auf dem PATH auszuführen. Und das ist keine bash .

    /bin/sh ist normalerweise eine Verknüpfung zur Standard-Shell des Systems, die viele / die meisten Orte /usr/bin/bash . Die ursprüngliche Bourne-Shell ist jedoch sh . Wenn Ihr Skript also eine bash (2. Generation, “Bourne Again sh”) verwendet, sollten Sie genauer sein und die spätere verwenden. Auf Systemen, auf denen bash nicht installiert ist, wird Ihr Skript nicht ausgeführt.

    Ich verstehe, dass es eine aufregende Filmtrilogie über diese Entwicklung geben kann … aber das könnte Hörensagen sein.

    Das Verwenden einer Shebang-Zeile, um den entsprechenden Interpreter aufzurufen, ist nicht nur für BASH. Sie können den Shebang für jede interpretierte Sprache auf Ihrem System verwenden, wie Perl, Python, PHP (CLI) und viele andere. Übrigens, der Shebang

     #!/bin/sh - 

    (es können auch zwei Bindestriche sein, zB -- ) endet mit bash options, danach werden alle als Dateinamen und Argumente behandelt.

    Mit dem Befehl env wird Ihr Skript portierbar und Sie können benutzerdefinierte Umgebungen für Ihr Skript einrichten, die von portablen Skripten verwendet werden sollten

     #!/usr/bin/env bash 

    Oder für was auch immer die Sprache wie für Perl

     #!/usr/bin/env perl 

    Achten Sie darauf, die man Seiten für bash :

     man bash 

    und env :

     man env 

    Hinweis: Auf Debian- und Debian-basierten Systemen wie Ubuntu ist sh mit dash not bash verknüpft. Wie alle Systemskripte verwenden sh . Dies erlaubt bash zu wachsen und das System bleibt laut Debian stabil.

    Um Aufruf * nix zu behalten, verwende ich niemals Dateierweiterungen in Shebang-aufgerufenen Skripten, da Sie die Erweiterung beim Aufruf ausführbarer Dateien nicht weglassen können, wie Sie es unter Windows können. Der Dateibefehl kann ihn als Skript identifizieren.

    Es hängt wirklich davon ab, wie Sie Ihre Bash-Skripte schreiben. Wenn Ihr /bin/sh mit bash verknüpft ist, wenn bash als sh aufgerufen wird, sind einige functionen nicht verfügbar .

    Wenn Sie Bash-spezifische Nicht-POSIX-functionen verwenden möchten, verwenden Sie #!/bin/bash