user_unknown
(Themenstarter)
Anmeldungsdatum: 10. August 2005
Beiträge: 17432
|
rklm schrieb: user unknown schrieb: Meine Faustregeln sähen allerdings anders aus:
Ich denke, es ist auch eine Seite für Leute, die anfangen Shell-Skripte zu schreiben, oder?
In erster Linie ist sie zur Arbeitserleichterung im S&P-Forum, wo es mühsam ist, das wieder und wieder zu erklären. Und es soll nicht zu lang werden, damit es gelesen wird. Und wer es liest, der braucht die Faustregeln nicht, denn der Text bringt die Informationen - hoffe ich - die den User von den Faustregeln emanzipieren. Nur wer den Text nicht liest, weil's zu lang ist, der soll halt die Faustregeln lesen, und glücklich werden.
Meine Faustregel hilft bestimmt niemandem, der ein Skript lesen will - aber Deine wendet sich ja auch an einen Autor. Wenn das eine Faustregel für die Fehlerbehebung sein soll, dann würde ich das auch explizit so schreiben.
Vielleicht sollte ich es deutlicher machen. Dann wird der Text noch länger.
Wenn man sich auf einen kleine gemeinsamen Nenner beschränkt, dann kommt man leichter überall klar.
Wer auf mehr als einem Rechner Linux benutzt, oder unixoides, der soll definitiv mehr als die Faustregeln lesen.
Man braucht beim Schreiben von Skripten auch überraschend wenige Features, die nicht bei POSIX definiert sind. Oft kann man z.B. Skripte ohne andere Arrays schreiben als die, die über $* und $@ im Skript und aufgerufenen Funktionen verfügbar sind.
Beschränk Dich wenn Du willst. Die Forenautoren wirst Du nicht umerziehen können, die Blogautoren in der weiten Welt eh nicht. Die User schauen sich das ab, und verwenden den falschen Shebang, und dann krachts.
Das ist im Prinzip die gleiche Argumentation wie die, nicht zu viele eigene Shell-Aliase zu definieren: sobald man sich auf einem anderen System einloggt, kommt man nicht mehr klar, weil einem die vertraute Arbeitsumgebung fehlt.
Nimm halt Deine .bashrc mit. Wer sich auf entfernte Systeme einloggt, und sich nur an 3 Faustregeln halten will, der hat es verdient auf die Nase zu fallen.
Die Beschränkung auf POSIX-Features könnte nur gelingen, wenn man alle User dazu brächte, sich auf POSIX-Features zu beschränken - das macht aber kaum einer. Das ist nicht praktikabel.
Nicht nötig. Es reicht, wenn man sich selbst beschränkt. Und wenn man denn weitere Features benutzt, gibt man halt die entsprechende Shell an.
Bitte, beschränk Dich. Wie gesagt, es geht um Leute die hier oder da was kopiert haben, und den Shebang nicht anpassen, und gegen die geschlossene Tür laufen. Die werden sich nicht beschränken, und denen sagt man: "Vielleicht liegt's am Shebang - lies da mal nach." Und da es kein Artikel ist, wie man Bashismen durch Posixstyle ersetzt, wird gezeigt, wie man die Anpassung in die Gegenrichtung macht. Du darfst nicht eine Faustregel für Sysadmins, die heterogene Landschaften pflegen, mit einer Faustregel für Heimuser verwechseln, die 500 Dateien umbenennen wollen, ohne programmieren zu können.
Man könnte hier auch noch erwähnen, dass man oft Shell-Optionen wie "-f" und "-e" in der Shebang-Zeile findet
Findet man das oft?
Hm, ich könnte das jetzt nicht sagen, wie oft ich das finde. Aber ich erinnere mich dunkel, dass es auch Beschränkungen beim Inhalt (Länge?) der Shebang-Zeile gibt. Müsste ich noch mal recherchieren, falls Du das nicht auf dem Radar hast. Diese Beschränkungen sind dann auch noch betriebssystemabhängig.
Betriebssystem ist Gnu-Linux/Ubuntu, soviel kann man schon sagen.
|
user_unknown
(Themenstarter)
Anmeldungsdatum: 10. August 2005
Beiträge: 17432
|
Heinrich Schwietering schrieb: also wenn Artikel zu Shebang, dann bitte aber auch einen allgemeinen Abschnitt. Shebang gibt's schließlich auch Python, Perl, Lua, ... Skripte.
Bitte prüfen ob das für die Sprachen auch zutrifft.
Was eben auch die Frage aufwirft, wie Ubuntu-relevant das Ganze denn wirklich ist...
Wird das jetzt der Beginn einer Lösch-und-Relevanzdiskussion? 😉
track schrieb:
Dafür würde wahrscheinlich schon eine kurze Erklärung reichen, am besten garniert mit einigen Beispielen aus sed, awk, Python, Perl einem "wilden Exoten" (vielleicht #!/bin/cat oder #!/usr/bin/tail -n4 ...?) und sinnigerweise auch #!/usr/bin/env ...
Mein Versuch was schnuckliges für env zu finden hat nicht geklappt. Also bitte selbst beisteueren. Danke.
|
noisefloor
Ehemaliger
Anmeldungsdatum: 6. Juni 2006
Beiträge: 28316
|
Hallo, habe mal eine allgemeine Anleitung geschrieben. Den folgenden Teil bitte ggf. dann anpassen. Ein eigener Abschnitt zu /usr/bin/env wäre auch schön. Gruß, noisefloor
|
user_unknown
(Themenstarter)
Anmeldungsdatum: 10. August 2005
Beiträge: 17432
|
Hi Noisefloor Deine neue Einleitung habe ich zurückgerollt, weil sie den Schwerpunkt für einen ganz anderen Artikel setzt: Der Shebang ist die ersten Zeile in einem Skript. In ihr teilt man dem Betriebssystem, mit welchem Interpreter das Skript ausgeführt werden soll. Dies hat den Vorteil das ein Skript - sofern ausführbar - direkt ohne Angabe des Interpreters gestartet werden kann, also z.B. statt Bei Shellskripten ist der Shebang von besonderer Bedeutung, da die verschiedenen Shells unterschiedliche Funktionen unterstützen. Außerdem bringt Ubuntu standardmäßig zwei verschiedene Shells mit, Dash und Bash.
Der Artikel soll in erster Linie die Frage klären, wieso mein Shellscript nicht läuft - nicht, was der Shebang so allgemein ist.
Der, die oder das Shebang
Bei ShellsKripten kommt es sporadisch zu Fehlern in Zusammenhang mit dem Shebang und symbolischen Links. Vor allem die Ursache des Fehlers will dieser Artikel erklären. Das Szenario besteht aus 3 Einflussgrößen:
Das stellte meine Einleitung klar - umso mehr, da ich sie gerade um einen Satz ergänzt habe. Die neue Einleitung richtet den Fokus auf eine ganz andere Frage, und sähe schön über einem allgemeinen Shebang-Artikel aus, aber dann wäre es nicht mehr der Artikel, der sich um den typischen Fehler kümmert, um den sich der Artikel kümmern soll. Der Artikel löst auch nicht ein, was Deine Einleitung verspricht, sondern beschäftigt sich, bezogen auf den Rahmen, den Du setzt, nur mit einem Randaspekt, und würde wg. Thema verfehlt eine schlechte Zensur verdienen.
|
noisefloor
Ehemaliger
Anmeldungsdatum: 6. Juni 2006
Beiträge: 28316
|
Hallo, das hättest du auch nach meinem ersten Posten sagen können... Wie soll der Artikel am Ende den heißen? Shebang ist ja dann falsch, weil DER wäre allgemein. Was ich immer noch hochgradig bevorzugen würde, weil "dein" Teil und ein allgemeiner sich ja nicht ausschließen. Gruß, noisefloor
|
user_unknown
(Themenstarter)
Anmeldungsdatum: 10. August 2005
Beiträge: 17432
|
noisefloor schrieb: Hallo, das hättest du auch nach meinem ersten Posten sagen können... Wie soll der Artikel am Ende den heißen? Shebang ist ja dann falsch, weil DER wäre allgemein.
Was hätte ich sagen können? Bei Shellskripten kommt es sporadisch zu Fehlern in Zusammenhang mit dem Shebang und symbolischen Links.
stand von Beginn an als Einleitung im Artikel. Hier http://forum.ubuntuusers.de/post/3731992/ habe ich früh in der Diskussion darauf hingewiesen. Ich hätte es beim Erzeugen des Artikels schon unterstreichen können, aber habe eigentlich mit umfassendem Desinteresse an dem Artikel gerechnet. ☺
Was ich immer noch hochgradig bevorzugen würde, weil "dein" Teil und ein allgemeiner sich ja nicht ausschließen.
Doch. Das wird ein Hybrid - eine eierlegende Wollmilchsau. Die Leute schreiben ja nicht #!/usr/bin/ruby1.8 in ihr Script, und wundern sich, dass es mit Ruby-2.4 nicht läuft. Und mit symbolischen Links /usr/bin/python nach perl muss auch niemand rechnen, und dass sich eine der Skriptsprachen unterschiedlich verhält, je nach dem, ob man sie so oder so aufruft, weil sie Introspection und Reflection betreiben, um dann nach diesem Standard oder jenem zu arbeiten - der GCC macht ein wenig sowas, wird aber nicht über Shebangs gesteuert, sondern über makefiles. Bash-sh-Sonderheiten dürften in einem allgemeinen Artikel nur am Rande eine Rolle spielen - das würde aber die Geschichte des Artikels auf den Kopf stellen, denn diese Sonderheiten sind die Hauptsache des Artikels, die er klären will. Bislang kam man offenbar bestens ohne einen allgemeinen Artikel aus; also sollte man sich nicht an ihm stören. Normalerweise würde ich auch zustimmen, dass der Name dann "Shellshebangprobleme" oder so heißen sollte - aber praktisch ist das nicht, man kann es sich nicht merken. Shebang kann man sich merken, und den Wikilinkbutton drücken und fertig - wenn ich erst wieder Stunden im Wiki suchen muss, wie bei anderen Gelegenheiten erlebt, dann lass ich es lieber, und schreibe wieder alles von Scratch, jedesmal. Gegen kurze Ergänzungen bei "Vermischtes" habe ich aber nichts.
|
noisefloor
Ehemaliger
Anmeldungsdatum: 6. Juni 2006
Beiträge: 28316
|
Hallo, dann mach' den Artikel mal fertig - dann schauen wir mal weiter, was noch sinnvoll eingebaut werden kann (oder nicht). Gruß, noisefloor
|
Ryuno-Ki
Anmeldungsdatum: 7. März 2011
Beiträge: 1105
|
user unknown schrieb: Außerdem würde ich die männliche Form für den Shebang bevorzugen, und nicht 'die Shebang' sagen.
Wikipedia-Autoren sind deiner Meinung 😉
|
axt
Anmeldungsdatum: 22. November 2006
Beiträge: 34254
|
user unknown schrieb:
Außerdem würde ich die männliche Form für den Shebang bevorzugen,
shebang...die Hütte, die Bude - und she heißt schließlich auch nicht er. 😉 Ich frage mich allerdings, weshalb Du hier einen 2. Thread beginnst, wenn es wie bei jedem neuen Baustellen-Artikel einen automatischen Thread dazu gibt, siehe http://forum.ubuntuusers.de/topic/baustelle-shebang/. Ryuno-Ki schrieb:
Wikipedia-Autoren sind deiner Meinung 😉
Was nun auch nichts heißen muß.
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
|
Um sachkundige Kritik wird gebeten.
Bei einem Artikel zum Shebang gehört weiter unten auf jeden Fall auch dazu, dass damit so ziemlich jeder Interpreter aufgerufen werden kann. Dieser Aspekt macht ja gerade die Vielseitigkeit dieses Konzepts aus. Dafür würde wahrscheinlich schon eine kurze Erklärung reichen, am besten garniert mit einigen Beispielen aus sed, awk, Python, Perl einem "wilden Exoten" (vielleicht #!/bin/cat oder #!/usr/bin/tail -n4 ...?) und sinnigerweise auch #!/usr/bin/env ... Meine 1½ Cent ... track
|
Vain
Anmeldungsdatum: 12. April 2008
Beiträge: 2503
|
Kleiner Flüchtigkeitsfehler im ersten Listen-Item:
Dürfte /bin statt /usr/bin sein.
track schrieb:
weiter unten auf jeden Fall auch dazu, dass damit so ziemlich jeder Interpreter aufgerufen werden kann
Des Spaßes wegen vielleicht auch erwähnen, dass der Interpreter selbst ein Skript mit Shebang sein kann und dass es da ein Rekursionslimit gibt (nämlich 4, siehe auch 1, 2, 3). Weiß nicht, ob das da auch noch reingehört, weil es ja ein Linux-Wiki ist, aber die Shebang-Parsing-Mechanismen unterscheiden sich von Linux zu Unix zu Unix, vorallem im Bezug auf Dinge wie „#!/usr/bin/python -v -t “ oder Leerzeichen.
|
user_unknown
(Themenstarter)
Anmeldungsdatum: 10. August 2005
Beiträge: 17432
|
Ryuno-Ki schrieb: user unknown schrieb: Außerdem würde ich die männliche Form für den Shebang bevorzugen, und nicht 'die Shebang' sagen.
Wikipedia-Autoren sind deiner Meinung 😉
Keine schlechte Idee, da auch mal nachzusehen, was die so wissen - allerdings doch schlecht - man muss das, was man für wichtig hält, ja dann auch einarbeiten, wie dies:
Bei Skripten mit Shebang werden vom Linuxkernel die SUID- und SGID-Flags ignoriert.
Ryuno-Ki schrieb Wikipedia-Autoren sind deiner Meinung 😉
Irgendwas muss ich falsch 😉 machen. track schrieb: Bei einem Artikel zum Shebang gehört weiter unten auf jeden Fall auch dazu, dass damit so ziemlich jeder Interpreter aufgerufen werden kann. Dieser Aspekt macht ja gerade die Vielseitigkeit dieses Konzepts aus.
Die Vielseitigkeit findet ein jähes Ende, wo der Hash keinen Kommentar einleitet. Ich selbst bin natürlich nur ein Datenpunkt, und keine statististische Signifikanz, aber ich benutze den Shebang quasi exclusiv für Shellscripte. Auch S&P-Fragen kommen eigentlich immer in dem Zusammenhang. Aber grundsätzlich gehört es natürlich i.d. Artikel - Bereich allgemeines/sonstiges.
Dafür würde wahrscheinlich schon eine kurze Erklärung reichen, am besten garniert mit einigen Beispielen aus sed, awk, Python, Perl einem "wilden Exoten" (vielleicht #!/bin/cat oder #!/usr/bin/tail -n4 ...?) und sinnigerweise auch #!/usr/bin/env ...
Nun - ich habe was im Auge. ... Vain schrieb: Kleiner Flüchtigkeitsfehler im ersten Listen-Item:
Dürfte /bin statt /usr/bin sein.
Richtig, gut gesehen! track schrieb: weiter unten auf jeden Fall auch dazu, dass damit so ziemlich jeder Interpreter aufgerufen werden kann
Des Spaßes wegen vielleicht auch erwähnen, dass der Interpreter selbst ein Skript mit Shebang sein kann und dass es da ein Rekursionslimit gibt (nämlich 4,
Oh! Lustig. Verdammt! ☺
Weiß nicht, ob das da auch noch reingehört, weil es ja ein Linux-Wiki ist, aber die Shebang-Parsing-Mechanismen unterscheiden sich von Linux zu Unix zu Unix, vorallem im Bezug auf Dinge wie „#!/usr/bin/python -v -t “ oder Leerzeichen.
-v -t steht für Verschwörungstheorie - oder? Was ist mit Leerzeichen? Leerzeichen im Programmpfad wie | #!/home/Schwachmat93/Eigene Programme/flasch
|
Geht das, gibt's das?
Um sachkundige Kritik wird gebeten.
Leute - lest mal zw. den Zeilen. "Um sachkundige Kritik wird gebeten." heißt soviel wie "ich möchte stehende Ovationen und blinde Zustimmung" - nicht Arbeitsanweisungen. Ts, ts, ts. Todo & Donetodo done /usr/bin SUID- und SGID-Flags Rekursionslimit 4 ich ⇒ man
|
Vain
Anmeldungsdatum: 12. April 2008
Beiträge: 2503
|
Ich ovuliere und stimme den Blinden zu! 👍 😉 user unknown schrieb: Was ist mit Leerzeichen? Leerzeichen im Programmpfad wie | #!/home/Schwachmat93/Eigene Programme/flasch
|
Geht das, gibt's das?
Meinte eigentlich „überschüssigen“ Whitespace as in:
#! /bin/bash -e Und das mit dem „-v -t “ wird bei Linux als ein Argument angesehen, während zum Beispiel FreeBSD ein „-v “ und ein „-t “ daraus machen soll (was ich immernoch nicht ausprobiert habe…). Aber: Ich habe erst jetzt verstanden, worauf du mit dem Artikel hinauswillst (siehe Diskussionsthread, Artikel gedacht als „da können wir Fragende aus S&P hinschicken“). Insofern dürften diese beiden Punkte nicht so wichtig sein. Aber²: Vielleicht sollte man noch erwähnen, dass die Datei unbedingt mit Unix-Zeilenenden gespeichert werden muss. Was anderes schmeckt dem Kernel nicht. Der Fehler passiert ja auch recht häufig. Dann gibt es im Idealfall eine schöne Fehlermeldung wie die:
$ ./gah.sh
-bash: ./gah.sh: /bin/bash^M: bad interpreter: No such file or directory
Wobei ich eigentlich im Hinterkopf hatte, dass die Fehlermeldung in dem Fall total nichtssagend war. Hat sich vielleicht vor kurzem erst geändert.
|
Yanneck
Anmeldungsdatum: 25. September 2009
Beiträge: 1192
|
Ich möchte mich auch für die Shebang aussprechen, weil es sich auf die erste Zeile (first line) bezieht, die geschrieben wird. Des Weiteren ist # auch die Raute. Und das She meint ja das Doppelkreuz.
|
user_unknown
(Themenstarter)
Anmeldungsdatum: 10. August 2005
Beiträge: 17432
|
Vain schrieb: Meinte eigentlich „überschüssigen“ Whitespace as in:
#! /bin/bash -e
Und was ist damit?
Und das mit dem „-v -t “ wird bei Linux als ein Argument angesehen, während zum Beispiel FreeBSD ein „-v “ und ein „-t “ daraus machen soll (was ich immernoch nicht ausprobiert habe…).
Ja, Linux. Ist ein Linuxwiki.
Aber: Ich habe erst jetzt verstanden, worauf du mit dem Artikel hinauswillst (siehe Diskussionsthread, Artikel gedacht als „da können wir Fragende aus S&P hinschicken“). Insofern dürften diese beiden Punkte nicht so wichtig sein.
Das scheine ich mehr herausstellen zu müssen.
Aber²: Vielleicht sollte man noch erwähnen, dass die Datei unbedingt mit Unix-Zeilenenden gespeichert werden muss.
Einspruch. Falsche Zeilenenden machen sich auch meist sonst störend bemerkbar, und haben also wenig mit dem Shebang zu tun.
Es ist im Zusammenhang mit dem Shebang auch selten. Wer schreibt denn Linuxscripte unter Windows? Mit Notepad?
|