Es wird als Kommentar implementiert, sodass alles, was in diese Zeile kommt, für den angegebenen Interpreter nicht "relevant" ist. Beispielsweise neigen alle Skriptsprachen dazu zu verstehen, dass eine Zeile, die mit beginnt, #ein Kommentar ist, und ignorieren den !/usr/bin/whateverTeil, der andernfalls ein Syntaxfehler in dieser bestimmten Sprache sein könnte.
Es ist normalerweise der Kernel, nicht die Shell, die dies verarbeitet. Die Shell ruft einfach den exec()Systemaufruf für die Datei auf.
Tripleee
47
Wenn Sie versuchen, ein Programm unter Unix auszuführen (eines mit gesetztem ausführbaren Bit), überprüft das Betriebssystem die ersten Bytes der Datei. Diese bilden die sogenannte "magische Zahl", anhand derer das Format des Programms und seine Ausführung festgelegt werden können.
#!entspricht der magischen Zahl 0x2321 (in einer ASCII-Tabelle nachschlagen). Wenn das System die magische Zahl erkennt, weiß es, dass es sich um ein Textskript handelt, und liest bis zum nächsten \n(es gibt eine Grenze, aber es entgeht mir atm). Nachdem der Interpreter identifiziert wurde (das erste Argument nach dem Schebang), wird der Interpreter aufgerufen.
Andere Dateien haben ebenfalls magische Zahlen. Wenn Sie eine Bitmap-Datei (.BMP) über anzeigen less, werden die ersten beiden Zeichen angezeigt BM. Diese magische Zahl zeigt an, dass die Datei tatsächlich eine Bitmap ist.
Wenn die Datei, in der sich dieses Skript befindet, ausführbar ist, #!teilt hash-bang ( ) dem Betriebssystem mit, welcher Interpreter zum Ausführen des Skripts verwendet werden soll. In diesem Fall ist es /bin/shzum Beispiel.
Die erste Zeile teilt der Shell mit, dass sie das Programm (in diesem Fall / bin / sh) zur Interpretation verwenden sollte, wenn Sie das Skript direkt ausführen (./run.sh; im Gegensatz zu / bin / sh run.sh).
Sie können es auch verwenden, um Argumente zu übergeben, üblicherweise -e (bei Fehler beenden) oder andere Programme (/ bin / awk, / usr / bin / perl usw.) zu verwenden.
#!/bin/shoder #!/bin/bashmuss die erste Zeile des Skripts sein, denn wenn Sie es nicht in der ersten Zeile verwenden, behandelt das System alle Befehle in diesem Skript als unterschiedliche Befehle. Wenn die erste Zeile steht #!/bin/sh, werden alle Befehle als ein einziges Skript betrachtet und es wird angezeigt, dass diese Datei im psBefehl ausgeführt wird und nicht die Befehle in der Datei.
Stapelüberlauf ist nicht Twitter. Bitte nehmen Sie sich die Zeit, um Wörter wie "u" und "1st" zu buchstabieren. Sie helfen beim Schreiben eines Nachschlagewerks, sodass die richtige Grammatik und Rechtschreibung von Bedeutung sind. Achten Sie auch auf die richtige Formatierung. Befehle, die über die Befehlszeile ausgegeben werden ps, und Code-Auszüge wie #!/bin/shsollten formatiert werden.
der Blechmann
Ich habe versucht, die Engländer hier aufzuräumen, bin mir aber immer noch nicht sicher, was das bedeutet. Ich denke, die Antwort versucht zu sagen, dass Befehle im Skript als unterschiedliche Befehle ausgeführt werden und das Hinzufügen eines Shebang das Skript als einen einzelnen Befehl in einer Prozessliste anzeigt. Das ist eigentlich nicht wahr.
Antworten:
Es heißt Shebang und teilt der übergeordneten Shell mit, welcher Interpreter zum Ausführen des Skripts verwendet werden soll.
z.B
Es wird als Kommentar implementiert, sodass alles, was in diese Zeile kommt, für den angegebenen Interpreter nicht "relevant" ist. Beispielsweise neigen alle Skriptsprachen dazu zu verstehen, dass eine Zeile, die mit beginnt,
#
ein Kommentar ist, und ignorieren den!/usr/bin/whatever
Teil, der andernfalls ein Syntaxfehler in dieser bestimmten Sprache sein könnte.quelle
exec()
Systemaufruf für die Datei auf.Wenn Sie versuchen, ein Programm unter Unix auszuführen (eines mit gesetztem ausführbaren Bit), überprüft das Betriebssystem die ersten Bytes der Datei. Diese bilden die sogenannte "magische Zahl", anhand derer das Format des Programms und seine Ausführung festgelegt werden können.
#!
entspricht der magischen Zahl 0x2321 (in einer ASCII-Tabelle nachschlagen). Wenn das System die magische Zahl erkennt, weiß es, dass es sich um ein Textskript handelt, und liest bis zum nächsten\n
(es gibt eine Grenze, aber es entgeht mir atm). Nachdem der Interpreter identifiziert wurde (das erste Argument nach dem Schebang), wird der Interpreter aufgerufen.Andere Dateien haben ebenfalls magische Zahlen. Wenn Sie eine Bitmap-Datei (.BMP) über anzeigen
less
, werden die ersten beiden Zeichen angezeigtBM
. Diese magische Zahl zeigt an, dass die Datei tatsächlich eine Bitmap ist.quelle
Wenn die Datei, in der sich dieses Skript befindet, ausführbar ist,
#!
teilt hash-bang ( ) dem Betriebssystem mit, welcher Interpreter zum Ausführen des Skripts verwendet werden soll. In diesem Fall ist es/bin/sh
zum Beispiel.Es gibt einen Wikipedia-Artikel darüber für weitere Informationen.
quelle
Die erste Zeile teilt der Shell mit, dass sie das Programm (in diesem Fall / bin / sh) zur Interpretation verwenden sollte, wenn Sie das Skript direkt ausführen (./run.sh; im Gegensatz zu / bin / sh run.sh).
Sie können es auch verwenden, um Argumente zu übergeben, üblicherweise -e (bei Fehler beenden) oder andere Programme (/ bin / awk, / usr / bin / perl usw.) zu verwenden.
quelle
#!/bin/sh
oder#!/bin/bash
muss die erste Zeile des Skripts sein, denn wenn Sie es nicht in der ersten Zeile verwenden, behandelt das System alle Befehle in diesem Skript als unterschiedliche Befehle. Wenn die erste Zeile steht#!/bin/sh
, werden alle Befehle als ein einziges Skript betrachtet und es wird angezeigt, dass diese Datei imps
Befehl ausgeführt wird und nicht die Befehle in der Datei.quelle
ps
, und Code-Auszüge wie#!/bin/sh
sollten formatiert werden.