Shebang

#!

Shebang oder Hash-Bang bezeichnet die Zeichenkombination #! am Anfang eines Skriptprogramms, ähnlich einer Dokumenttypdefinition. Bei unixoiden Betriebssystemen führt die Markierung mit Rautezeichen und Ausrufezeichen dazu, dass das folgende Kommando mitsamt allen angegebenen Argumenten beim Aufruf des Programms ausgeführt wird. Der Dateiname wird dann als weiteres Argument übergeben.

Etymologie

Der Begriff Shebang stammt mit ziemlich hoher Sicherheit aus dem Amerika des 19. Jahrhunderts. Der Ausdruck bezeichnet ursprünglich wahrscheinlich entweder eine Hütte, Unterkunft oder auch ein Zelt, eventuell einen Ort, wo unlizenzierter Alkohol getrunken wird (irisch Shebeen). Ab Mitte des 19. Jahrhunderts bezeichnet der Begriff aber auch eine Pferdekutsche (so verwendet zum Beispiel von Mark Twain).

Shebang wird aber seit über 150 Jahren im Normalfall innerhalb des Ausdrucks „the whole shebang“ verwendet, was grob übersetzt „Kram, Sache, Angelegenheit“ bedeutet. Dies scheint von „running the whole shebang“ herzustammen, einem Ausdruck, der im späten amerikanischen Bürgerkrieg im Zusammenhang mit Quartiermeistern entstand.

Im Unix-Kontext wird es als Verkürzung von sharp bang oder hash bang gedeutet, was sich auf die zwei Anfangszeichen bezieht. Im Unix-Jargon wird das Ausrufezeichen als bang und das Rautezeichen als hash oder auch sharp bezeichnet.

Geschichte

Der Mechanismus wurde in seiner ursprünglichen Form eingeführt, um Shellskript-Dateien für die unterschiedlichen Unix-Shells sh und csh voneinander unterscheiden zu können. Dabei wurde anhand des ersten Zeichens der Datei entschieden, wenn es entweder „:“ oder „#“ lautete. Dies sind Zeichen, die in der jeweiligen Skriptsprache entweder Kommentare einleiten („#“), oder – im Fall von „:“ – den Aufruf einer leeren Funktion (NOP) darstellen und daher ohne Beeinträchtigung der Funktionalität des Skriptes in die Dateien eingebaut werden können.

Der Shebang wurde von Dennis Ritchie in der Zeit zwischen den Unix-Versionen 7 und 8 der Bell Laboratories eingeführt. In derselben Zeit wurde es in BSD-Unix übernommen.[1] Da Version 8 des Unix von Bell nicht mehr veröffentlicht wurde, wurde der Shebang erst durch BSD in großem Stil bekannt.

Implementierung

Die Shebang-Zeichen stellen eine im ASCII-Zeichensatz für Menschen lesbare Form einer magischen Zahl für ausführbare Programme dar, der magische String entspricht hexadezimal 0x23 0x21. Damit kann der Betriebssystemkern die Datei bereits als Skript erkennen und mit dem angegebenen Interpreter ausführen. Das Skript gilt auf diese Weise als nahezu vollwertiges Programm und kann als solches im Betriebssystem aufgerufen werden.

Verwendung

Ein Hallo-Welt-Programm in Perl. Die erste Zeile enthält den Pfad zum Interpreter sowie ein Argument (-w).

Eine typische Shebang-Zeile sieht so aus:

#!/bin/sh

Diese Zeile weist das Betriebssystem an, diese Datei mit dem Interpreter-Programm /bin/sh auszuführen, in diesem Fall also der Standard-Unix-Shell.

Die Shebang-Zeile #!/bin/cat macht ein Programm zu einem (unechten) Quine, das seinen Inhalt auf die Standardausgabe ausgibt, indem es seinen Namen dem Programm cat übergibt.

Probleme

Speicherort

Einige Speicherorte sind im Filesystem Hierarchy Standard (FHS) normiert, sodass FHS-konforme Unix-artige Systeme die entsprechende Programme, oder symbolische Verknüpfungen darauf, am normierten Pfad vorhalten müssen. So ist eine POSIX-kompatible Unix-Shell immer unter /bin/sh. Jedoch sind nicht alle Unix-Derivate FHS-konform, und der Speicherort für weitere Interpreter ist nicht normiert. Daher kann es notwendig sein, die shebang-Zeile zu ändern, wenn ein Skript von einem Computer zu einem anderen kopiert wird.

Um hier Abhilfe zu schaffen, kann man das Programm env benutzen:

#!/usr/bin/env python

env startet das gewünschte Programm (hier Python) unabhängig vom Speicherort, indem es die Standard-Umgebungsvariablen der Betriebssystemkonfiguration lädt – und damit auch die Umgebungsvariable PATH – und dann nach dem Programm python in diesen Programmpfaden sucht. Auf diese Weise findet es in diesem Beispiel den Pythoninterpreter unter /usr/bin/python. Allerdings ist auch env nicht auf jedem System installiert und nicht unbedingt immer an derselben Stelle zu finden.

Ist der Speicherort unklar, können auch die Kommandozeilen-Befehle type, command -v oder which weiterhelfen:

user@localhost:~$ type python
python is /usr/bin/python

Windows

Windows kennt das Shebang grundsätzlich nicht. Werden aber Programmpakete, die für Windows und Unix gleichermaßen entwickelt wurden, unter Windows installiert, so interpretieren oft einige Programmteile das Shebang. So „versteht“ beispielsweise der Apache-Webserver Shebangs, wenn er CGI-Skripte aufruft. Hier ein mögliches Beispiel, wie ein Python-Skript von Apache aufgerufen wird:

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

Shebang als Sonderform eines Kommentars in der Skriptsprache

Durch die Verwendung des Shebangs können theoretisch beliebige Interpreter aufgerufen werden, denen dann das gesamte Script zur Verarbeitung übergeben wird. Die Verwendung des Shebangs als Aufruf für den Interpreter ist allerdings nur dann möglich, wenn das Shebang von diesem ignoriert wird, da diese keine Anweisung für den Interpreter selbst enthält. Durch das Rautezeichen wird das Shebang in vielen Skriptsprachen als Kommentar bewertet und damit ignoriert. Alternativ könnte der Interpreter immer die erste Zeile überspringen.

Bei gängigen Sprachen wie Ruby, Perl, Python oder PHP ist dies der Fall, da sie das Rautezeichen für Zeilenkommentare verwenden. Andere Sprachen hingegen verwenden andere Zeichen für (Zeilen-)Kommentare. REXX-Interpreter beispielsweise sehen dieses Zeichen allgemein als Syntaxfehler an. Aus diesem Grund sind nicht beliebige Interpreter für den Aufruf über den Shebang geeignet.

Mitunter adressiert das Shebang einen Präprozessor, der die Zeile auswertet, entfernt und den Rest an einen Interpreter oder Compiler übergibt. Dies ist beispielsweise bei InstantFPC der Fall, einem Kommando, das die Ausführung von Pascalskripten mit Free Pascal unter verschiedenen Betriebssystemen erlaubt.[2] Obwohl Pascal das Zeichen "#" nicht als Kommentarkennzeichen verwendet, werden die Skripte fehlerfrei kompiliert und ausgeführt, da InstantFPC die Shebangzeile entfernt und sonstige Parameter extrahiert. Ab Version 0.9.31 erkennt auch Lazarus die Shebangzeile.[2] In der Lisp-Variante Scheme und in D ist das Rautezeichen zwar allgemein kein Kommentar, aber die Shebang-Zeile wird vom Compiler als erste Zeile speziell ignoriert.[3][4]

Unicode Byte Order Mark am Dateianfang

Skriptdateien enthalten Text und zählen zu den Textdateien. Textdateien in Unicode-Kodierung beginnen oft mit einer Byte-Order-Markierung (BOM). Steht eine solche BOM am Anfang einer Skriptdatei, also vor der Shebang-Konstruktion, dann wird die Shebang-Konstruktion unter Umständen nicht erkannt (auch diese muss per Definition am Anfang stehen). Daher sollte bei Skripten, die ein Shebang nutzen, auf eine BOM am Dateianfang verzichtet werden.

Siehe auch

  • Erkennung des korrekten Interpreters bei Binärdateien unter Linux: binfmt misc

Einzelnachweise

  1. Archivauszug von 1980 auf in-ulm.de; bereits vorhanden in Version 4BSD und standardmäßig aktiviert in Version 4.2BSD
  2. a b Deutsche Dokumentation zu InstantFPC
  3. SRFI-22
  4. The D Language Foundation: D Programming Language Specification. (PDF, 1,46 MB) S. 5, archiviert vom Original (nicht mehr online verfügbar) am 3. Oktober 2017; abgerufen am 17. Oktober 2017 (englisch).  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/dlang.org

Read other articles:

St. Jakobus in Jakobwüllesheim Choransicht St. Jakobus ist die römisch-katholische Filialkirche des Ortsteils Jakobwüllesheim der Gemeinde Vettweiß im Kreis Düren (Nordrhein-Westfalen). Die Kirche ist Jakobus dem Älteren geweiht und unter Nummer Jak-5 in die Liste der Baudenkmäler in Vettweiß eingetragen. Inhaltsverzeichnis 1 Geschichte 1.1 Allgemeines 1.2 Kirchengebäude 2 Architektur 3 Ausstattung 4 Sonstiges 5 Pfarrer 6 Einzelnachweise 7 Weblinks Geschichte Allgemeines Eine Kapelle...

Застаріла геоцентрична модель ставить Землю в центр Всесвіту. Замінені теорії в науці — перелік загальноприйнятих теорій, розроблених в рамках науки, донаукової натурфілософії та природної історії, які з тих пір були замінені науковими теоріями. Багато відкинутих п�...

Saint-Cyr-en-Val Gemeente in Frankrijk Situering Regio Centre-Val de Loire Departement Loiret (45) Arrondissement Orléans Kanton La Ferté-Saint-Aubin Coördinaten 47° 50′ NB, 1° 58′ OL Algemeen Oppervlakte 44,23 km² Inwoners (1 januari 2020) 3.313[1] (75 inw./km²) Hoogte 92 - 126 m Overig Postcode 45590 INSEE-code 45272 Foto's Gemeentehuis Portaal    Frankrijk Saint-Cyr-en-Val is een gemeente in het Franse departement Loiret (regio Centre-Val de Loire). De ...

Serif typeface designed by Eric Gill Eric Gill's artwork for the capitals of Solus, showing an alternative 'M' at bottom right similar to that of Gill Sans. Solus is a serif typeface that was designed by English sculptor and stonemason Eric Gill for the British Monotype Corporation and released in 1929.[1][2][3][4][5] Solus has a structure of straight, regular serifs reminiscent of slab-serif typefaces of the nineteenth century, but with a reduced build...

كأس بلغاريا 1957 تفاصيل الموسم كأس بلغاريا  النسخة 17  البلد بلغاريا  المنظم اتحاد بلغاريا لكرة القدم  البطل ليفسكي صوفيا  كأس بلغاريا 1956  كأس بلغاريا 1958–59  تعديل مصدري - تعديل   كأس بلغاريا 1957 (بالبلغارية: Купа на Съветската армия 1957)‏ هو موسم من كأس بلغاري...

Didier William in his studio. Photo: Ryan Collerd, Courtesy of the Pew Center for Arts and Heritage Didier William is a mixed-media[1] painter originally from Port-au-Prince, Haiti.[2][3][4] His work incorporates traditions in oil painting, acrylic, collage and printmaking to comment on intersections of identity and culture.[5][6] Early life and education William was born in 1983 in Port-au-Prince, Haiti.[7] He grew up in Miami, Florida,...

  لمعانٍ أخرى، طالع قنا (توضيح). قنا الجديدة قنا الجديدة  قنا الجديدةشعار سميت باسم قنا  تاريخ التأسيس 2000 (منذ 23 سنة) تقسيم إداري البلد  مصر المحافظة محافظة قنا المسؤولون رئيس جهاز المدينة أيمن رشاد[1] خصائص جغرافية إحداثيات 26°13′55″N 32°44′21″E / 26.2318055555...

American actor (1927–2016) For the American lawyer and government official, see Marvin Kaplan (lawyer). Marvin KaplanKaplan in 1951BornMarvin Wilbur Kaplan(1927-01-24)January 24, 1927Brooklyn, New York, U.S.DiedAugust 25, 2016(2016-08-25) (aged 89)Burbank, California, U.S.Alma materBrooklyn CollegeOccupationsActorplaywrightscreenwriterYears active1949–2016Spouse Rosa Felsenburg ​ ​(m. 1973; div. 1976)​Websitemarvinkaplan.com T...

Aleksandr Osatkin-VladimirskyАлександр Асаткин-ВладимирскийFirst Secretary of the Communist Party of ByelorussiaIn officeFebruary 1923 – May 1924Preceded byVilhelm KnorinSucceeded byAlexander Krinitsky Personal detailsBorn(1885-10-15)15 October 1885Kostroma Governorate, Russian EmpireDied2 July 1937(1937-07-02) (aged 51)Moscow, Russian Soviet Federative Socialist Republic, Soviet UnionNationalitySovietPolitical partyRSDLP (b) (1903-1918) All-Union C...

2001 science fiction horror film by Jean de Segonzac This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Mimic 2 – news · newspapers · books · scholar · JSTOR (January 2021) (Learn how and when to remove this template message) Mimic 2Official DVD coverDirected byJean de SegonzacWritten byJoel SoissonProduced byJ...

British actor Zackary MomohMomoh at the Los Angeles premiere of Doctor SleepBornJuly 1988 (age 35)Lambeth, London, EnglandAlma materIdentity School of ActingOccupationActorYears active2010–present Zackary Momoh (born July 1988) is a British actor. He began his career in theatre[1] and made his feature film debut in A United Kingdom (2016).[2] On television, he is known for his roles in the Netflix crime drama Seven Seconds (2018) and the HBO fantasy serie...

Ancient city on Santorini island This article does not cite any sources. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Ancient Thera – news · newspapers · books · scholar · JSTOR (January 2021) (Learn how and when to remove this template message)This article is about Santorini's city of classical antiquity. For its Bronze Age (prehistoric) city, see Akrotiri (pre...

Suburb of Melbourne, Victoria, AustraliaLangwarrinMelbourne, VictoriaLangwarrinCoordinates38°09′04″S 145°10′52″E / 38.151°S 145.181°E / -38.151; 145.181Population23,588 (2021 census)[1] • Density995.3/km2 (2,578/sq mi)Postcode(s)3910Area23.7 km2 (9.2 sq mi)Location 42 km (26 mi) from Melbourne 7 km (4 mi) from Frankston LGA(s)City of FrankstonState electorate(s)HastingsFederal division(s)Dunkl...

Lokomotif C53Lokomotif C5317 di Museum Transportasi Taman Mini Indonesia Indah (TMII).Data teknisSumber tenagaUapProdusenWerkspoor, N.V., BelandaTanggal dibuat1917-1922Jumlah dibuat20 unitSpesifikasi rodaNotasi Whyte4-6-2Susunan roda AAR2-C-1DimensiPanjang20.792 mmBeratBerat kosong109,19 tonBahan bakarSistem mesinKinerjaKecepatan maksimum90 km/h (karena di atas 90 km/h terjadi guncangan hebat)Daya mesin1.200 hpLain-lainKarierPerusahaan pemilikStaatsspoorwegenDaerah operasiPulau JawaMulai dina...

«Війна світів» Герберта Велзаангл. H. G. Wells' War of the Worldsнім. Krieg der Welten 3 Жанр фантастикагорорпригодиРежисер Девід Майкл ЛеттПродюсер David RimawidСценарист Герберт ВеллсНа основі Війна світівУ головних ролях Крістофер Томас Гауелл, Джек Б'юзіd, Пітер Ґрін, Лі Скоттd, Tinarie Van...

Artikel atau sebagian dari artikel ini mungkin diterjemahkan dari Pilot (Smallville) di en.wikipedia.org. Isinya masih belum akurat, karena bagian yang diterjemahkan masih perlu diperhalus dan disempurnakan. Jika Anda menguasai bahasa aslinya, harap pertimbangkan untuk menelusuri referensinya dan menyempurnakan terjemahan ini. Anda juga dapat ikut bergotong royong pada ProyekWiki Perbaikan Terjemahan. (Pesan ini dapat dihapus jika terjemahan dirasa sudah cukup tepat. Lihat pula: panduan pener...

1929 film by Géza von Bolváry This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: The Wrecker 1929 film – news · newspapers · books · scholar · JSTOR (June 2021) (Learn how and when to remove this template message) The WreckerDirected byGéza von BolváryWritten byBenno VignyBased onThe Wreckerby Arnold R...

Unofficial mascot of Stanford University Stanford TreeThe Tree (left) at the 2008 Big GameUniversityStanford UniversityConferencePac-12DescriptionEvergreen treeFirst seen1975 The Stanford Tree is the Stanford Band's mascot and the unofficial mascot of Stanford University. Stanford's team name is Cardinal, referring to the vivid red color (not the common songbird as at several other schools), and the university does not have an official mascot. The Tree, in various versions, has been called on...

This article relies largely or entirely on a single source. Relevant discussion may be found on the talk page. Please help improve this article by introducing citations to additional sources.Find sources: Renfe Class 446 – news · newspapers · books · scholar · JSTOR (October 2019) Class 446Cercanias 446.180 at Pinar de Las Rozas stationManufacturerCAF, MACOSA, MTM, Cenemesa, Conelec, MelcoConstructed1989-1993Refurbished2005Number built170 sets (510 veh...

This article uses bare URLs, which are uninformative and vulnerable to link rot. Please consider converting them to full citations to ensure the article remains verifiable and maintains a consistent citation style. Several templates and tools are available to assist in formatting, such as reFill (documentation) and Citation bot (documentation). (September 2022) (Learn how and when to remove this template message) Villa in Durrës, AlbaniaRoyal Villa of DurrësVila mbretërore e DurrësitThe m...