staging.inyokaproject.org

Shell/Modi

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |
Dieses Thema ist die Diskussion des Artikels Shell/Modi.

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6389

Hallo,

hier ein kleiner Artikel über verschiedene Shell-Modi mit Beispielen.

Dieser Artikel wird als Erklärung/Verlinkung für den entstehenden Artikel Baustelle/Shell/Umgebungsvariablen benötigt. Die thematische Vorarbeit wurde von kB in Baustelle/Umgebungsvariable gemacht und von mir aufbereitet und mit Beispielen versehen.

Bitte um Gegenlesen und Korrektur, gerne direkt im Artikel.

Gruß BillMaier

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17432

Ich habe ein paar Schreibfehler korrigiert.

Eine „interaktive Shell“ ist mit einem Terminal (Tastatur, Bildschirm) verbunden

Anführungsstriche setzt man um direkte Rede und Zitate. Sie deuten einen Wechsel der Sprecherstimme an. Um Fachbegriffe und Fremdwörter setzt man keine, auch wenn das eine oft zu sehende Marotte ist. Man soll sich beim Lesen keinen Amerikaner vorstellen, der "interaktive Shell" dazwischen ruft. Das Ding nennt man Shell und es ist interaktiv, so what? Wir schreiben auch nicht

Eine "gegrillte Bratwurst" ist nett beim Abendessen.

Eine Ausnahme könnte eine Wortfolge bilden, bei der das erste, beispielsweise englische Wort, auch im Deutschen vorkommt, aber eine andere Bedeutung hat, so dass man im Lesefluss erst bei dem folgenden stolpert und dann das vorige nochmal ansehen muss, um zu merken, dass es auch schon englisch war. Normalerweise würde man es dann kursiv setzen:

Der Server ran out of memory!

Ausführlicher und elaborierter: http://www.belleslettres.eu/content/zeichensetzung/anfuhrungszeichen.php

Substantive verkoppelt man im Deutschen i. d. R. durch Zusammen-schreibung. Das gilt auch für Fremdwörter die nicht sakrosankt sind und daher nicht berührt werden dürfen, wie Loginshell. Bei einem Sprachmix, wenn der Leser sich sonst zu verlesen droht, kann man Ausnahmen machen (Ur-Instinkt). Also wenn es wirklich, konkret droht - nicht generell weil es angeblich droht. Auch wenn ein Wort auf e endet und das nächste mit u oder i beginnt, und man ein "eu" oder "ei" zu lesen Gefahr läuft. Bei etablierten Begriffen besteht die Gefahr aber kaum ("Eheinstitut").

Im Zweifel gilt: Zusammenschreiben.

BillMaier Team-Icon

Supporter
(Themenstarter)

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6389

tldr: Danke 😉

BillMaier Team-Icon

Supporter
(Themenstarter)

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6389

Hallo,

hab Teile davon jetzt doch übernommen nach Baustelle/Umgebungsvariable (Abschnitt „Environment-einzelner-oder-aller-Benutzer“), womit wir eine gewisse Redundanz haben.

Das alles dort rein zu packen wäre mir aber zu viel.

crosslink: 9009397

Gruß BillMaier

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

BillMaier schrieb:

... und Korrektur, gerne direkt im Artikel.

Ich war dann mal so frei, im größeren Maßstab Hand anzulegen.

Frage / Anmerkung: entgegen der Behauptung im Artikel (und anderen Internetseiten) öffnet der Aufruf von bash -l oder dash -l aus einer laufenden, interaktiven Shell, egal ob Loginshell oder nicht, unter Ubuntu (und auch Raspbian) _keine_ Loginshell, sondern immer eine Nicht-Loginshell. Von daher habe ich das mal aus dem Artikel entfernt.

Korrekturen dürfen gerne direkt im Artikel gemacht werden.

Gruß, noisefloor

BillMaier Team-Icon

Supporter
(Themenstarter)

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6389

Hallo,

die Einleitung, Erklärungen und die Analyse/Debugging finde ich sehr gut.

Fachliche Anmerkungen:

Die Differenzierung bei SSH hast du unterschlagen, was aber IMHO eine große Fehlerquelle beim Einsatz von Umgebugsvariablen ist.

$ ssh 10.139.0.111 echo '$-'
hBc

▶ erwartungsgemäß (weil logisch) nicht-interaktiv, fehlt aber jetzt im Artikel.

Schlechter finde ich den Abschnitt "Beispiele für alle vier Kombinationen". Hier fand ich die Tabelle besser, der Fließtext und die Überschriften mit dem vielen "login/nicht login interaktiv nicht-interaktiv" finde ich erschlagend und sehr unübersichtlich. Sprich: Ich will meinen Anwendungsfall (im Codeblock) finden und dann wissen, was das für eine Shell ist. Ob man dazu ne Tabelle braucht, weiß ich nicht aber wir brauchen auf jeden Fall

Beispiel → Shell-Art

und nicht nur

Shell-Art1

  • Beispiel ...

Alternativ wäre eine Tabelle wie

                   login              nicht-login


interaktiv         beispiele           beispiele

nicht-interaktiv   beispiele          beispiele

Gruß BillMaier

BillMaier Team-Icon

Supporter
(Themenstarter)

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6389

noisefloor schrieb:

Frage / Anmerkung: entgegen der Behauptung im Artikel (und anderen Internetseiten) öffnet der Aufruf von bash -l oder dash -l aus einer laufenden, interaktiven Shell, egal ob Loginshell oder nicht, unter Ubuntu (und auch Raspbian) _keine_ Loginshell, sondern immer eine Nicht-Loginshell.

Komme auf das gleiche Ergebnis unter ubuntu. Obwohl Manpage:

-l        Make bash act as if it had been invoked as a login shell (see INVOCATION below).

Gruß BillMaier

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

fehlendes Beispiel ist drin und am Ende ist eine Tabelle. Ist IMHO in der Tat ein bisschen übersichtlicher.

Bitte noch mal drüber schauen und ggf. korrigieren.

Gruß, noisefloor

BillMaier Team-Icon

Supporter
(Themenstarter)

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6389

Hallo, habe noch ein paar Korrekturen vorgenommen. Hier die Anmerkungen dazu:

nicht-interaktive Shell

"ohne dass ein Nutzer die Ausgaben der Shell direkt sieht" → stimmt so nicht. ssh server 'hostname' gibt mir durchaus direkt die Ausgabe aus. Entfernt.

"Eine Login-Shell steht nicht im direktem Zusammenhang mit dem dem Loginvorgang eines Nutzers am System." → finde ich nachwievor verwirrend und habe ich gelöscht, denn man kann das durchaus als "direkten Zusammenhang" sehen.

Es reicht: "Eine Loginshell erhält man, wenn man unmittelbar nach dem Anmelden in einer initialen Shell landet."

Gruß BillMaier

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 7816

noisefloor schrieb:

[…] Frage / Anmerkung: entgegen der Behauptung im Artikel (und anderen Internetseiten) öffnet der Aufruf von bash -l oder dash -l aus einer laufenden, interaktiven Shell, egal ob Loginshell oder nicht, unter Ubuntu (und auch Raspbian) _keine_ Loginshell, sondern immer eine Nicht-Loginshell.

Das ist falsch! Eine Loginshell ist lt. Dokumentation von bash und dash dadurch definiert, dass sie beim Aufruf die Dateien /etc/profile und ~/.profile für den Benutzer, unter dem der Prozess läuft, per sourcing auswertet. Eine z.B. per bash -l gestartete Shell impliziert keinen Anmeldevorgang, sondern es ist umgekehrt: Der Modus Loginshell ist vorgesehen, von einem Anmeldeprozess aus aufgerufen zu werden, kann aber auch unabhängig davon verwendet werden.

Bitte die Bezeichnung Loginshell nicht mit dem Login-Vorgang verwechseln oder vermengen.

Die Befehle dash -l und bash -l starten Loginshells, ich hatte das für die Überarbeitung des Artikels Umgebungsvariable getestet.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17432

kB schrieb:

Eine z.B. per bash -l gestartete Shell impliziert keinen Anmeldevorgang, sondern es ist umgekehrt: Der Modus Loginshell ist vorgesehen, von einem Anmeldeprozess aus aufgerufen zu werden, kann aber auch unabhängig davon verwendet werden.

Das ist eine klare Information, die den Namen erklärt und mir zum ersten Mal zu ein wenig Logik verhilft. Das sollte ungefähr so in den Wikiartikel, finde ich, eventuell ergänzt um den Zusatz, dass dabei die profile-Dateien mit den Einstellungen gelesen werden (was sonst meist nicht nötig ist, weil die schon gelesen sind und geerbt werden?).

BillMaier Team-Icon

Supporter
(Themenstarter)

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6389

Hallo,

dann stimmt aber die Analyse nicht?

$ bash -l 
$ echo $SHELL
/bin/bash

weil laut Artikel fehlendes - ▶ keine Loginshell.

Gruß BillMaier

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

Eine z.B. per bash -l gestartete Shell impliziert keinen Anmeldevorgang,

Habe ich auch nicht behauptet

Und dann stimmt die Man-Page der bash nicht... Da steht doch explizit drin, dass echo $0 bei einer Login Shell mit - beginnt. Tut eine unter *buntu gestartet mit bash -l oder bash --login aber nicht.

Das diverse Konfig-Dateien bei bash -l gelesen werden steht auch außer Frage - und im Artikel wird auch nichts gegenteiliges behauptet.

Also wenn du das mit dem bash -l vs. echo $0 schlüssig er- und aufklären kannst, kann das mit bash -l oder dash -l gerne wieder in den Artikel.

Gruß, noisefloor

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

gerade nochmal getestet:

In der ~/.profile habe ich export FOOBAR=spamegg eingefügt. Wenn ich aus dem GNOME-Terminal bash -l aufrufe und echo $FOOBAR ausführe, erscheint spamegg als Ausgabe. ~/.profile wird also Dank -l gelesen. Wenn ich bash aufrufe und echo $FOOBAR ausführe, erscheint eine leere Zeile als Ausgaben, ~/.profile wird also nicht gelesen. So steht's ja auch in der Man-Page der Bash.

Nur gibt in beiden Fällen der Aufruf von echo $0 die Ausgabe bash, was lt. Man-Page der Bash heißt, dass die laufende Bash keine Login-Shell ist.

Kann es sein, dass der Aufruf bash -l die Bash dazu bewegt, sich wie eine Login Shell zu verhalten, ohne eine tatsächliche Login Shell zu sein?

Gruß, noisefloor

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 7816

noisefloor schrieb:

[…]

Eine z.B. per bash -l gestartete Shell impliziert keinen Anmeldevorgang,

Habe ich auch nicht behauptet

Und ich wollte Dir das auch nicht unterstellen und meinte meine Ausführung nur als allgemeine Erläuterung.

Und dann stimmt die Man-Page der bash nicht... Da steht doch explizit drin, dass echo $0 bei einer Login Shell mit - beginnt.

In der Man-Page steht der Satz:

"A login shell is one whose first character of argument zero is a -, or one started with the --login option."

Eine oder-Verknüpfung. Damit ist eine Shell genau dann keine Loginshell, wenn $0 nicht auf "-" lautet (manche meinen: nicht damit beginnt) und sie nicht mit der Option --login gestartet wurde. Bei der bash ist die Option --login die Langform der POSIX-kompatiblen Schreibweise -l.

Antworten |