679 Stimmen

Warum müssen Sie #!/bin/bash an den Anfang einer Skriptdatei setzen?

Ich habe Bash Skripte, und sie liefen alle problemlos ohne #!/bin/bash am Anfang.

Wozu soll man das einbauen? Würden die Dinge anders laufen?

Außerdem, wie spricht man aus # ? Ich weiß, dass ! wird als "bang" ausgesprochen.

Wie ist #! ausgeprägt?

20voto

Noufal Ibrahim Punkte 68934

En . ist eine Anweisung an den Lader, das Programm zu verwenden, das nach der Anweisung #! als Interpreter für die betreffende Datei, wenn Sie versuchen, sie auszuführen. Wenn Sie also versuchen, eine Datei namens foo.sh die über #!/bin/bash am Anfang, der eigentliche Befehl, der ausgeführt wird, lautet /bin/bash foo.sh . Dies ist eine flexible Möglichkeit, verschiedene Interpreter für verschiedene Programme zu verwenden. Dies ist etwas, das auf der Systemebene implementiert ist, und die API auf Benutzerebene ist die Shebang-Konvention.

Es ist auch wichtig zu wissen, dass der ganze Kram ein magische Zahl - eine menschenlesbare, die die Datei als Skript für den angegebenen Interpreter identifiziert.

Dass es auch ohne den Shebang "funktioniert", liegt nur daran, dass das betreffende Programm ein Shell-Skript ist, das für dieselbe Shell geschrieben wurde, die Sie verwenden. Sie könnten zum Beispiel sehr wohl eine Javascript-Datei schreiben und dann eine #! /usr/bin/js (oder etwas Ähnliches), um ein Javascript-"Shell-Skript" zu haben.

12voto

Uday Sawant Punkte 5581

Sie wird als . . Es besteht aus einem Zahlenzeichen und einem Ausrufezeichen (#!), gefolgt von dem vollständigen Pfad zum Interpreter, z. B. /bin/bash. Alle Skripte unter UNIX und Linux werden mit dem in der ersten Zeile angegebenen Interpreter ausgeführt.

5voto

Abdirahim Ali Punkte 45

Der Bash-Standard für die "Bourne-Again-Shell" ist nur einer von vielen verfügbaren Typen Shells in Linux.

Eine Shell ist ein Befehlszeileninterpreter, der Befehle annimmt und ausführt.

Die Bash ist in den meisten Linux-Distributionen die Standardshell. Aus diesem Grund ist Bash ein Synonym für Shell.

Die Shell-Skripte haben oft fast die gleiche Syntax, aber sie unterscheiden sich auch manchmal. Zum Beispiel beginnt der Array-Index in Zsh bei 1 und nicht bei 0 in der Bash. Ein Skript das für die Zsh-Shell geschrieben wurde, funktioniert in der Bash nicht auf die gleiche Weise, wenn es Arrays enthält.

Um unangenehme Überraschungen zu vermeiden, sollten Sie dem Interpreter mitteilen, dass Ihr Shell-Skript für die Bash-Shell geschrieben ist. Wie machen Sie das?

beginnen Sie einfach Ihr Bash-Skript in #!/bin/bash

1voto

star Punkte 555

Sie werden auch einige andere Parameter nach #!/bin/bash sehen, zum Beispiel
#!/bin/bash -v -x
lesen Sie dies, um eine bessere Vorstellung zu bekommen.
https://unix.stackexchange.com/questions/124272/what-do-the-arguments-v-and-x-mean-to-bash .

0voto

Beardy Punkte 83

Sie kann für jemanden nützlich sein, der ein anderes System verwendet, in dem diese Bibliothek nicht ohne weiteres verfügbar ist. Wenn diese nicht deklariert ist und Sie einige Funktionen in Ihrem Skript haben, die von diesem System nicht unterstützt werden, sollten Sie #/bin/bash deklarieren. Ich bin bei der Arbeit schon einmal auf dieses Problem gestoßen und füge es jetzt einfach als Praxis hinzu.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X