shebang



Shebang (auch Magic – Linie ) bezeichnen bei unixoiden Betriebssystem stirbt Zeichenkombination #!am Anfang Eines Scripts Programme , ähnlich Eine Dokumenttypdefinition . Die Markierung mit Doppelkreuz und Ausrufezeichen Führt dazu that das folgende Kommando mitsamt allen angegebenen Argument beim Aufruf des Programm ausgeführt Wird. There Dateiname wird dann als weiteres Argument übergeben. Andere Betriebssysteme – Beispiel Microsoft Windows – Verwenden Sie Technik Cousin. Nur bei speziellen Umgebungen, die sie Common Gateway Interface im Apache HTTP Server, ist die Shebang-Konstruktion auf diese Systeme eine Rolle.

Etymologie

Der Begriff Shebang stammt mit Sicherheit Ziemlich Hoher aus dem Amerika des 19. Jahrhunderts. Der Ausdruck bezeichnet ursprünglich wahrscheinlich Entweder Eine Hutt, Unterkunft oder Auch ein Zelt, jede EINES Orts, wo unlizenzierter Alkohol getrunken Wird ( Irisch Shebeen ). Ab Mitte des 19. Jahrhunderts bezeichnet der Begriff aber Auch Eine Pferdekutsche (so used zum beispiel von Mark Twain ).

Shebang Wird aber seit über 150 jahren im normalen Fall des Ausdrucks Innerhalb „der ganze Kram“ used, war Grob übersetzt „Kram, Sache, Engel Selbst Heit“ Bedeutende. Gesenke Schien von „den ganzen Kram läuft“ herzuzustammen, Ein Ausdruck, der im spats Amerikanischen Bürgerkrieg entsteht und im zusammenhang mit Offizieren used Wird, sterben sterben Zelte, das Zeltlager und stirbt Einheit in Gang hält, der sogenannten Quartiermeister .

Im Unix-Kontext wird als Verkürzung von sharp bang oder hash bang deutet, wurde auf die zwei Anfangszeichen bezogen. Im Unix – Jargon Wird das Ausrufezeichen als Knall und das Doppelkreuz als Hash oder Auch scharfbezeichnet.

Geschichte

Der Mechanismus Wurde in Wadenfänger Ursprüngliche Formular in Hollywood Mikron Shell Script -Dateien für sterben Unterschiedlich Unix Shells SH und CSH voneinander unterscheiden zu Können. Dabei Würde anhand der Erste Zeichen der Datei Entschieden, Wenn Es Entweder “ : “ oder “ # “ lautet. Dies Sind Zeichen, sterben in der jeweiligen Skriptsprache Entweder Kommentare einleiten ( “ # „) oder – im Fall von“ : “ – der Aufruf Wacholder Leeren Funktion (NOP) Schauspieler und DAHER ohne Beeinträchtigung wo Funktionalität des Scripts in sterben dateien Eingebaut Werden can .

Der Shebang Wurde von Dennis Ritchie in der Zeit swiss die Unix-Versionen 7 und 8 der Bell Laboratories eingeführt. In der gleichen Zeit wurde es in BSD -Unix übernommen. [1] Wenn Version 8 von Unix von Bell nicht bekannt ist, ist es einen Besuch wert, sie kennt den Shebang durch BSD in Großem Stil.

Implementierung

Die Shebang-Zeichen Stellen Eines im ASCII -Zeichensatz für Menschen lesbare Form Einer Magie chen Zahl für ausführbares Programm dar, das Magischen String Entspricht hexadezimal 0x23 0x21 . Damit kann der Betriebssystemkern die Datei freigeben und mit dem angegebenen Interpreter ausführen. Dieses Skript gilt als die Weise als ein vollwertiges Programm.Es ist möglich, Solo im Betriebssystem zu laufen. Voraussetzung ist, dass die Unix-Dateirechterichtiger Verstand. Das heißt, dass wie bei jedem Programm ist. Dann schreiben Sie den Code of Interpreter mit den Rechten der Ausführenden Sie können diese Seite lesen, siehe Link unten.

Verwendung

Ein Hello-Welt-Programm in Perl . Die erste Zeil enthält den Pfad zum Interpreter ( -w).

Eine typische Shebang-Zeil sieht so aus:

 #! / Bin / sh

This Line whisted Betal bass system and this dialogue for the Interpreter- Programm /bin/sh, in the fall auch the Standard- Unix-Shell , auszuführ.

Das Shebang-Zeil #!/bin/catPower One Programm zu einem (unechten) Quine , das seinen Inhalt auf die Standardausgabe ausgibt, nennt die Namen des Programms catübergibt.

Probleme

Speicherort

Unter diesem unterscheidet sich Unix oft unterscheidlich. DAHER ist es Hauf Notwendig, sterben shebang -Zeile zu ÄNDERN, Wenn Ein Script von Einem Computer – zu Einem Anderen kopiert Wird.

About this abhufe zu schaffen, kann man das Programm env utilutzen:

 #! / usr / bin / env python

env begann das Programm gewünscht (hier Python ) unabhängig vom Speicherort, INDEMAR es Standardmatrizenstahl Umgebungsvariablen wo Betriebssystemkonfiguration LADT – und DAMIT Auch Umgebungsvariable sterben PATH – Und dann nach DM Programm Python in Diesen Programmpfaden sucht. Auf diese Weise findet es in solchen Beispielen den Python-Interpreter unter /usr/bin/python. Allerdings ist auch env nicht auf jedem System installiert und nicht festgelegt.

Ist der Speicherort unklar, auch der Kommandozeilen-Befehl, welcher weiterhelfen:

Benutzer @ localhost: ~ $ welche Python
/ usr / bin / Python

Windows

Windows lehrt das Shebang grundsätzlich nicht. Wurden aber Programmpakete, die Windows und Unix installiert, entwickelt Windows, so interpretieren oft die einzigen Programmteile das Shebang. So „verstehst“ der Apache-Webserver Shebangs, CGI-Skripte aufgeruft. Hier wird eines der wichtigsten Beispiel, das ein Python- Skript von Apache aufgerufen wird:

 #! C: \ Programme und Anwendungen \ Python 2.48 \ bin \ python.exe

Beim Portieren von Scripten von Windows Nach Unix und Umgekehrt Sollte Herstellung, Wagenrücklauf-, Dateiende- und Sonstige Sonderzeichen, Die Probleme werden gemacht.

Shebang als Sonderform eines Kommentars in der Skriptsprache

Durch die Nutzung des Shapes kann das gesampelte Script zur Verarbeitung übergangen werden. Die Anwendung des Shebangs als Aufruf für den Interpreter ist jedoch nur dann möglich, wenn das Shebang von diesem ignoriert wird, da keine Anweisung für Interpreter selbst enthält. Durch das Doppelkreuz wird das Shebang in Dolmetschersprachen als Kommentar vertert und damit ignoriert. Alternativ kannte Interpreter die schlechteste Zeile überspringen.

Verfügbare Sprachen wie Ruby , Perl , Python oder PHP sind die Würfel des Falls, weil sie das Doppelkreuz für Zeilenkommentare sind. Andere Reden verknüpfen andere Zeichen für (Segeln) Kommentare. REXX -Interpreter steht im Allgemeinen als Syntaxfehler an. Aus diesem Grund sind nicht zu glauben Dolmetscher für den Aufruf über den Shebang geeignet.

Mitunter adressiert das Shebang EINES Präprozessor, wo Zeile auswertet sterben, Entfernt und die Ruhe eines oder Compiler übergibt EINEN Interpreter. Dies ist der Fall bei InstantFPC of the Fall, bei dem es sich um den Befehl der Pascal Scripts mit Free Pascal Unter Betriebssystemsystemen handelt. [2] Obwohl Pascal das Zeichen „#“ nicht als Kommentarkennzeichen used, Werden sterben Skript fehlerfrei kompiliert und ausgeführt , wenn InstantFPC sterben Shebangzeile Entfernt und allfällige Parameter extrahiert. Ab Version 0.9.31 erkennt Lazarus das Shebang-Segel. [2] Im Lisp-Variante- Schema und in Dist das Doppelkreuz zwar algemeen Kommentar, der Shebang-Zeile vom Compiler als erstes Zeile speziell ignoriert. [3] [4]

Unicode Byte Order Mark am Dateianfang

Scripting Datumstext und der Text des Textes. Textdaten in Unicode-Kodierung beginnen oft mit einer eigenen Byte-Order-Markierung (BOM). Steht Eine Sölch BOM am Anfang Einer Skriptdatei, auch die Shebang-Konstruktion, Dann vor Wird Shebang-Konstruktion unter umständen nicht Erkannt (auch this Sie per Definition am Anfang Stehen) sterben. There solte bei Skripten, die ein Sheback, auf eine BOM am Dateianfang verzerrt.

Segeln

Auch die Zeilen der ersten Zeile, auch das Zeilenumbruchzeichen , sind für die richtige Interpretation relevant. Das heißt, das Betriebssystem sollte nicht in der Lage sein, das Zeilenumbruchzeichen zu verwechseln. So ist es unter Unix zwingend nötig that Ein Shebang-Zeile nur with the Line – Feed – -Zeichen ( LF) beten Werden. Windows Sailing Pflichten Haben Vor dem LF-Zeichen oder Ein Wagenrücklaufzeichen ( CR). Unter Unix wird dieses CR-Zeichen dann fälschlich den Namen des aufzurfenden Skript-Interpreters hinzugefügt.

Beispiel für Steuerzeichenproblem
Skriptdatum mit Unix -Seilendende Scripting Datum mit Windows -Securing
Text von Datei test.pl
#! / usr / bin / perl
# dies ist ein Kommentar
drucken ( "Hallo Welt" );
#! / usr / bin / perl
# dies ist ein Kommentar
drucken ( "Hallo Welt" );
Hexdump der Datei
23 21 2f 75 73 72 2f 62 #!/usr/b
69 6e 2f 70 65 72 6c 0a in/perl.
23 20 64 69 65 73 20 69 # dies i
73 74 20 65 69 6e 20 4b st ein K
6f 6d 6d 65 6e 74 61 72 ommentar
0a 70 72 69 6e 74 28 22 .print("
48 61 6c 6c 6f 20 57 65 Hallo We
6c 74 22 29 3b lt");
23 21 2f 75 73 72 2f 62 #!/usr/b
69 6e 2f 70 65 72 6c 0d in/perl.
0a 23 20 64 69 65 73 20 .# dies
69 73 74 20 65 69 6e 20 ist ein
4b 6f 6d 6d 65 6e 74 61 Kommenta
72 0d 0a 70 72 69 6e 74 r..print
28 22 48 61 6c 6c 6f 20 ("Hallo
57 65 6c 74 22 29 3b Welt");

Beim Ausführen, beide, lesen Programme, welche verschiedene Segler, die Judenplattform werden, die die Ausgabe erklimmen Hallo Welt. Versuch das Windows-Programm unter Unix auszufuhren, endet mit einem Fehler, zum Beispiel:

$ ./test.pl
bash: ./test.pl: / usr / bin / perl ^ M: schlechter Interpreter: Datum des Besitzes

Das ^Mist dabei das Steuerzeichen, Welches für das Wagenrücklaufzeichen CRSteht. Nur durch Umwandeln der Unix-Zeilenenden konnten die Shebang-Zeilen rekrutiert werden.

In der Praxis stimmen die Telefone mit der Portierung des Programms auf der anderen Plattform überein. Bei Skript, sterben eigentlich Plattformunabhängigkeit aufweisen, Führt stirbt analog zu obigen genannten Problemen zu Handlungsbedarf.

Siehe auch

  • Erkenne die Korrektheit von Dolmetschern bei Binärdateien unter Linux: binfmt misc
  • Film Feuerwerk auf Italienisch , Originaltitel: ‚The Whole Shebang‘

Einzelstunden

  1. Hochspringen↑ Archivauszug von 1980 auf inulm.de ; Vorbereitet in Version 4BSD und standardmäßig aktiviert in Version 4.2BSD
  2. ↑ Hochspringen nach:a b Deutsche Dokumentation zu InstantFPC
  3. Hochspringen↑ SRFI-22
  4. Hochspringen↑ Die D-Sprachenstiftung: D Programmiersprachenspezifikation. S. 5 ; Abgerufen ist der 17. Oktober 2017 (PDF, 1,46 MB, Englisch).