Diskussion:Shebang

aus Wikipedia, der freien Enzyklopädie
Letzter Kommentar: vor 2 Jahren von 2003:A:E1D:3800:694C:D13C:45DD:8B8E in Abschnitt Etymologie
Zur Navigation springen Zur Suche springen

Die Formulierung "eingebaut werden können" (in eine Datei) kann irreführend wirken. Besser ist das einfache Wort "schreiben".... Less is more..... -- WeltBessereDich 22:42, 9. Aug. 2008 (CEST)Beantworten

Abschnitt "Windows"[Quelltext bearbeiten]

Da Windows ein anderes System hat, Ordner und Partitionen anzusprechen, und es auch keinen standardisierten Pfad zu Anwendungsprogrammen gibt, gibt es quasi keine einheitliche Shebang-Zeilen, die für mehrere Windows-Installationen Gültigkeit hätten.

Seltsam; einen Abschnitt weiter oben ging es darum, dass unter *IX %PATH% verwendet wird, und nun wird das ganz anders für Windows dargestellt? Da stimmt was nicht.
-- Tuxman 00:29, 17. Jul. 2009 (CEST)Beantworten

Lies genauer: Im Abschnitt oben steht, dass bei der Shebang #!/usr/bin/env die Pfadvariable durchsucht wird. Ich kenne keine Windows-Alternative zu env. --BerntieDisk. 00:54, 17. Jul. 2009 (CEST)Beantworten
Naja, beide Formulierungen waren nicht hinreichend. Vielleicht ist das ein brauchbarer Kompromiss? --Benji 01:21, 17. Jul. 2009 (CEST)Beantworten
Gefällt mir besser, ja. :-)
-- Tuxman 01:39, 17. Jul. 2009 (CEST)Beantworten

Abschnitt Implementierung[Quelltext bearbeiten]

„Damit kann der Kernel des Betriebssystems die Datei bereits als Skript erkennen und mit dem angegebenen Interpreter ausführen.“ ist m. E. so nicht richtig. Für die Auswertung der Shebang-Zeile ist meines Wissens die Shell zuständig, die dann entsprechend den Programmaufruf substituiert. Der Prozessmanager (als Teil des Kernels) sieht dann nur das Binary des Interpreters (plus Parameter), in etwa so als häte ein Benutzer den Befehl auf der Kommandozeile eingegeben. Siehe z.B. [1], [2] und [3]. --IrrwahnGrausewitz 13:43, 1. Sep. 2010 (CEST)Beantworten

Die vorherige Version war richtig, der Shebang wird im execve-Systemaufruf (oder seinen Varianten), also vom Kernel ausgewertet. Eine Shell ist daran nicht beteiligt. Siehe z. B. den ersten Absatz der Linux-Manpage für execve.
Dass die Bash (beispielsweise) den Shebang ignoriert, zeigt folgendes Experiment:
Anzeige des Inhaltes des Skriptes:
$ cat shelltest
#!/bin/cat
Hello World!
Ausführung: der Kernel involviert /bin/cat als "Interpreter":
$ ./shelltest
#!/bin/cat
Hello World!
Ausführung mit Bash: der Shebang wird (als beliebiger Kommentar) ignoriert:
$ bash shelltest
shelltest: line 2: Hello: command not found
$  
Habe den Abschnitt entsprechend korrigiert. --Mosmas 14:22, 29. Mär. 2011 (CEST)Beantworten

Kommentar in der Skriptsprache[Quelltext bearbeiten]

In finde den Absatz sehr ungelücklich und wohl auch am Thema vorbei. Ich kenne REXX nicht, kann also nicht beurteilen wie gross die Probleme bei REXX sind. Aber wenn es Probleme gibt, dann liegt es wohl eher daran, dass die Sprache nicht für Unix entwickelt wurde.

Bei PHP gibt es ganz sicher keine Probleme obwohl der Artikeltext dies suggeriert und obwohl PHP kein Lattenkreuz als Kommentar verwendert. Hier ein Beispiel:

#!/usr/bin/php
Diese Zeile wird vom PHP interpreter ignoriert und einfach ausgegeben.
Die shebang-Zeile ganz oben wird aber nicht ausgegeben!
# Diesen Kommentar kann man sehen. 
<?php
  echo "Der PHP-Interpreter sagt: Hallo Welt\n";
?>
Diese Zeile wird ebenfalls vom PHP interpreter ignoriert und einfach ausgegeben.
<?php
  die("... dei die() dei ... das Programm ist tot ...\n");
?>
Diese Zeile lässt selbst der PHP-Interpreter nicht mehr durchgehen.

Wird das Beispiel in die Datei ./shebang-test.php gespeichert und die Flags entsprechend gesetzt, dann kann man das Programm auf der Kommandozeile mit "./shebang-test.php" oder "php -f ./shebang-test.php" aufrufen. Beide Methoden funktioneren perfekt.

Den Absatz sollte man vieleicht in "Probleme mit Nicht-Unix-Sprachen" oder so ähnlich umbenennen und entsprechend textlich ein bischen anpassen. Vieleicht auch beschreiben wie man diese Probleme umschiffen kann (HereDoc o.ä.).

Gibt es andere Meinungen? --Nohome 18:22, 27. Jan. 2011 (CET)Beantworten

Was isn eine Unix-Sprache?
-- Tuxman 11:13, 28. Jan. 2011 (CET)Beantworten
Das Problem ist doch, wenn die Sprache nicht die Raute als Zeilenkommentar beinhaltet, und REXX hat C-ähnliche Kommentarzeichen (/* bla */). Aber OOREXX als REXX-Implementierung hat da etwa genauso wie PHP eine Sonderbehandlung, dass die erste Zeile schlicht ignoriert wird, wenn #! vorgefunden wird. Unix-Sprache ist ein unpraktischer Begriff (steht auch nicht so im Artikel), aber es ist ja klar, was gemeint ist: Sprachen, die nicht für oder zumindest auf unixoiden Systemen entwickelt wurden. --Benji 01:57, 31. Jan. 2011 (CET)Beantworten
Klingt nach WP:TF.
-- Tuxman 21:26, 31. Jan. 2011 (CET)Beantworten
Formuliers halt besser. --16:10, 4. Mär. 2011 (CET)

- "und obwohl PHP kein Lattenkreuz als Kommentar verwendert" - doch, tut es. Auch wenn die C/C++-Syntax weiter verbreitet ist. 137.138.36.24 11:26, 4. Mär. 2011 (CET)Beantworten

PHP erkennt das Lattenkreuz aber nur als einzeiligen Kommentar innerhalb interpretierter Blöcke:
<?php
 # dies ist ein kommentar
?>
 # aber dies ist kein Kommentar.
--Benji 16:10, 4. Mär. 2011 (CET)Beantworten
Natürlich, denn der Teil außerhalb ist kein PHP-Code.
-- Tuxman 12:44, 5. Mär. 2011 (CET)Beantworten

Der Absatz wurde durch mich angepasst und ich hoffe, daß es nun klarer wird, was gemeint ist. Es ging dem Autor darum, darauf hinzuweisen, daß nur solche Interpreter über das Shebang aufgerufen werden können, welche das Shebang dann selbst ignorieren, da ja das gesamte Script an den Interpreter übergeben wird - im Idealfalls also dadurch, daß es als Kommentar gewertet wird. Wenn damit die Diskussion beendet ist, kann der Hinweis auf Korrektur entfernt werden. --Daniel "Quippy" Becker (Diskussion) 08:44, 23. Sep. 2015 (CEST)Beantworten

Sinn & Zweck aus Artikel nicht ersichtlich.[Quelltext bearbeiten]

Was bringt Shebang für einen Vorteil gegenüber dem direkten Aufruf des zuständigen Interpreters mit dem Skript als Parameter? --217.231.64.84 15:04, 3. Jun. 2013 (CEST)Beantworten

Mindestens zwei Vorteile: Erstens kann ein Anwender das Skript wie ein Kommando aufrufen und benutzen, ohne den Interpreter und weitere Details (s. u.) kennen zu müssen. Zweitens kann der Interpreter – ggf. einschließlich benötigter Aufrufargumente – exakt definiert werden; beispielsweise könnte eine Interpreterversion mit besonderen, für die Funktionsweise des Skriptes unerlässlichen Eigenschaften in einem speziellen Verzeichnispfad installiert sein, oder das Skript funktioniert nur, wenn der Interpreter mit bestimmten Optionen gestartet wird. Sollte man vielleicht im Artikel noch ergänzen. --Mosmas (Diskussion) 19:31, 3. Jun. 2013 (CEST)Beantworten
Es mag sein, dass Motivation und Hintergrund im Artikel ungenügend deutlich werden.
Ein weiterer Grund: Würden Parameter und Infos über das spezifische Skript nicht in dieser Zeile stehen, müsste man auf dem Server ein README danebenlegen. Wenn jemand das Skript herunterlädt oder mailt, muss aufgepasst werden, das README mit herunterzuladen und zu mailen. Um es zu starten, muss ich erstmal das README öffnen und nachgucken, mit welcher Skriptvariante und welchen Parametern ich es aufrufen muss, weil ich das längst wieder vergessen habe. Da ist es mir lieber, wenn das System selbst nachguckt und das automatisch richtig macht. (Okay, statt gesonderter README könnte man natürlich einen Kommentar an den Anfang des Skriptes schreiben. Auch dann muss ich aber erst nachgucken, mit welchen Parametern ich starten soll.)
Es ist nervig genug, dass die Pfade und Optionen nicht restlos kompatibel sind und man immer mal wieder nach dem ersten Fehlschlag die erste Zeile an die eigene Installation anpassen muss.
Liebe Grüße --PerfektesChaos 00:47, 4. Jun. 2013 (CEST)Beantworten

S-Bits[Quelltext bearbeiten]

Gelöscht: "Bei Skripten mit Shebang werden vom Linuxkernel die SUID- und SGID-Flags ignoriert." Dies gilt auf den meisten Systemen generell für Skripte - unabhängig davon, ob sie den Shebang enthalten oder nicht (siehe Setuid). Das tut hier also nichts zur Sache. --Mosmas (Diskussion) 15:23, 9. Sep. 2015 (CEST)Beantworten

Was hat Hash-Bang mit Shebang zu tun?[Quelltext bearbeiten]

Ich wurde von dem Artikel Ajax hier hergeleitet. In dem Artikel ging es im Unterkapitel um die Zurückschaltfläche bei Webseiten die mit der dynamischen Ajax Technologie nur schwer funktionieren und der Tatsache, dass es aufgrund der dynamischen Clientseitigen Eigenschaft einer Webseite mit Ajaxtechnik schwierig ist, beim Drücken des Zurückbutton den vorherigen Zustand der Webseite wiederherzustellen. Als Lösung wird in dem Artikel dann erwähnt, dass man sich hierbei Hashtags in der URL und dem Client-Pfad bedient und dies etwas mit einem Hash-Bang zu tun hätte. Es steht dort bspw. folgender Text: "Eine weit verbreitete Variante ist auch, die URL mit einem Hashtag und einem Client-Pfad zu ergänzen, der den aktuellen Navigationszustand einer Web-Applikation repräsentiert. Insbesondere wird hier der sogenannte Hash-Bang[8] diskutiert, um URLs zu diesem Zweck zu differenzieren." Schaut man sich dann an, was hier darüber steht, dann handelt es sich hier um den Shebang bei Unix Skripten die meiner Meinung nach gar nichts mit Webtechnologien zu tun haben. Es wundert mich daher, das man auf der Suche nach einem Artikel über Hash-Bang hier auf diesen Shebang Artikel geleitet wird, wenn beides nichts miteinander zu tun haben scheint. --134.3.80.238 16:45, 18. Okt. 2018 (CEST)Beantworten

Zeilenenden hier off-topic[Quelltext bearbeiten]

Die Problematik der unterschiedlichen Kodierung des Zeilenumbruchs bei Windows ist keine spezifische Shebang-Problematik und daher in dem Artikel meines Erachtens überflüssig. Wenn man unbedingt will, kann man hierauf verweisen: https://de.wikipedia.org/wiki/Zeilenumbruch#Programmierung:_Codierung_des_Umbruchs Ich würde es aber ganz weglassen. Wie gesagt hat das mit Shebang gar nichts zu tun, sondern betrifft den Austausch von Textdaten zwischen Windows und anderen Systemen generell. (nicht signierter Beitrag von 2A02:810D:EC0:C2D8:B421:172C:54AE:5FC1 (Diskussion) 17:29, 22. Nov. 2020 (CET))Beantworten

Etymologie[Quelltext bearbeiten]

Den ganzen ersten Teil dieses Abschnitts sollte man streichen; die Beschreibung des Wortursprungs (in der hier gesuchten Bedeutung!) ist falsch bzw. nutzlos. Der Abschnitt beginnt insbesondere mit den Worten: "Der Begriff Shebang stammt...", obwohl es doch um eine Benennung, nicht um einen Begriff geht. Der Begriff, um den es geht, ist ja doch ein völlig anderer:

Konkret geht es um die Benennung für die Zeichenfolge "#!' in Shell-scripts o. Ä. Das SH(e) kommt von HaSH, das Bang (Knall) umschreibt das Ausrufezeichen: "In the 1950s, secretarial dictation and typesetting manuals in America referred to the mark as "bang",[8][9] perhaps from comic books where the ! appeared in dialogue balloons to represent a gun being fired,[10] although the nickname probably emerged from letterpress printing.[11] This bang usage is behind the names of the interrobang, an unconventional typographic character, and a shebang, a feature of Unix computer systems." (https://en.wikipedia.org/wiki/Exclamation_mark) Manche Entwickler reden auch vom Hashbang, dafür gibt's auch einen Wikip.eintr in der englischen Sprache. (nicht signierter Beitrag von 2003:A:E1D:3800:694C:D13C:45DD:8B8E (Diskussion) 06:49, 21. Jul. 2021 (CEST))Beantworten