ubuntuusers.de

Shell

Status: Gelöst | Ubuntu-Version: Ubuntu 8.10 (Intrepid Ibex)
Antworten |
Dieses Thema ist die Diskussion des Artikels Shell.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17594

Wohnort: Berlin

Die man-page der Bashhat mehrere Abschnitte zu dem Thema, und es geht so los:

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

An interactive shell is one started without non-option arguments and without the -c option whose standard input and error are both connected to terminals (as determined by isatty(3)), or one started with the -i option. PS1 is set and $- includes i if bash is interactive, allowing a shell script or a startup file to test this state.

Ich liebe es, denn man muss dann schauen was jene Option bewirkt, und diese, und dann meint man, man hätte es, aber dann wird das andere Startverhalten erklärt, und bei flüchtiger Betrachtung sieht das eigentlich genauso aus. Man müsste es mit viel Geduld und vielleicht einer Tabelle und spitzem Bleistift genau analysieren, was ich vielleicht machen würde, wenn ich ein Problem zu lösen hätte, aber ich bin noch keinem Problem wg. unterschiedlicher Eigenschaften von interaktiver xterm-Shell und Loginshell begegnet.

When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.

When a login shell exits, bash reads and executes commands from the file ~/.bash_logout, if it exists.

When an interactive shell that is not a login shell is started, bash reads and executes commands from /etc/bash.bashrc and ~/.bashrc, if these files exist. This may be inhibited by using the --norc option. The --rcfile file option will force bash to read and execute commands from file instead of /etc/bash.bashrc and ~/.bashrc.

Dem entnehme ich, dass, als interactive login shell gestartet, 2 Konfigurtionsdateien gelesen werden, /etc/profile, und ~/.bash_profile (außer ...), während interactive shell that is not a login shell /etc/bash.bashrc und ~/.bashrc (außer ...).

Nur ist ja bash i.d.R. beides, also keine interaktive Shell, die keine Loginshell ist. Mir widerstrebt es zunächst ein neu gestartetes xfterm4 als Loginshell zu bezeichnen, weil ich ja schon eingeloggt bin, aber auf einem Multithreaded-Multiuser-System könnte man auch sagen, dass dies ein zusätzlicher Login für das System ist.

Man wird ja ganz wuschig!

Wenn ich mir den Output von last ansehe, dann scheint mir das Starten einer weiteren Shell als Login zu zählen, obwohl ich den Eindruck habe, schon eingeloggt zu sein - ich gebe ja meinen Namen u. mein Passwort nicht erneut ein.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13128

user unknown schrieb:

Nur ist ja bash i.d.R. beides, also keine interaktive Shell, die keine Loginshell ist. Mir widerstrebt es zunächst ein neu gestartetes xfterm4 als Loginshell zu bezeichnen, weil ich ja schon eingeloggt bin, aber auf einem Multithreaded-Multiuser-System könnte man auch sagen, dass dies ein zusätzlicher Login für das System ist.

Wenn ich mir den Output von last ansehe, dann scheint mir das Starten einer weiteren Shell als Login zu zählen, obwohl ich den Eindruck habe, schon eingeloggt zu sein - ich gebe ja meinen Namen u. mein Passwort nicht erneut ein.

Genau. So sieht das aus. Wenn man mal pstree -punc | less -p $$ ausführt, dann sieht man, dass gnome-terminal einen Benutzerübergang markiert:

        |-ntpd(4299,ntp)
        `-gnome-terminal(4800,robert)-+-{gnome-terminal}(4803)
                                      |-{gnome-terminal}(4804)
                                      |-gnome-pty-helpe(4807)
                                      |-bash(4808)-+-pstree(4867)
                                      |            `-less(4868)
                                      `-{gnome-terminal}(4810)

Vermutlich deshalb wird die Shell als Login-Shell gestartet. Ist ja auch sinnvoll, wenn man bedenkt, dass man in .bash_login etc. typischerweise Initialisierungen macht, die man nur ein Mal pro Login macht (z.B. etwas zu $PATH hinzufügen).

Der Begriff "Login-Shell" wird m.E. in diesen beiden Bedeutungen verwendet, die nicht immer klar getrennt sind:

  1. Das Programm, das beim Benutzerlogin ausgeführt wird.

  2. Eine Shell, die beim Start bestimmte Dinge tut (bestimmte Dateien liest) und z.B. auch nicht suspendiert werden kann.

Ciao

robert

kaputtnik

Anmeldungsdatum:
31. Dezember 2007

Beiträge: 9245

Hi,

was ist denn nun Standard unter Ubuntu?

Shells
Name Beschreibung Paket Standard?
Bash Wohl weitestverbreitete Shell bei Linux-Systemen; unter Ubuntu Standard-Login-Shell/interaktive Shell bash ja
Dash Standard-Shell unter Ubuntu dash ja

So viel ich weiß ist bash der Standard. Oder ist eine Login-Shell was grundsätzlich anderes wie eine Shell?

Antiqua Team-Icon

Avatar von Antiqua

Anmeldungsdatum:
30. Dezember 2008

Beiträge: 4534

kaputtnik schrieb:

Hi,

was ist denn nun Standard unter Ubuntu?

Beides, bzw. ja 😉

So viel ich weiß ist bash der Standard. Oder ist eine Login-Shell was grundsätzlich anderes wie eine Shell?

Unter Ubuntu verlinkt /bin/sh/bin/dash. Die Dash (bitte lesen, da wird darauf eingegangen) ist kleiner und wird beim boot-Vorgang benutzt. Das spart ein Paar Sekunden(-bruchteile?) beim Boot-Vorgang. Macht aber gerne Probleme mit Shell-Scripte, die #!/bin/sh als She-Bang haben, aber eigentlich bash-Scripte sind und bash-Eigenheiten benutzen, die die Dash nicht kennt (eine gern genommene Fehlerquelle bei Shell-Scripten).

Die bash wird standardmäßig als Shell benutzt, wenn man sich einloggt und wenn man ein Terminal öffnet. Und natürlich bei Scripten, die #!/bin/bash als She-Bang haben.

Also stimmt beides. Beide sind Standard bei ubuntu.

kaputtnik

Anmeldungsdatum:
31. Dezember 2007

Beiträge: 9245

Antiqua schrieb:

Also stimmt beides. Beide sind Standard bei ubuntu.

Danke ☺

linux_joy

Anmeldungsdatum:
6. Februar 2008

Beiträge: 757

Wohnort: Hannover

Hallo zusammen,

soeben ist mir beim Lesen des Artikels aufgefallen, dass meiner Meinung nach die 5 Zeilen ab

Um herauszufinden mit welcher Shell man im Moment arbeitet, kann man sich die Variable $SHELL anzeigen lassen:

so gar nicht zum Abschnitt "Befehlsübersicht" passen (wollen)!

Wäre für die nicht eher eine eigene Abschnitts-Überschrift angebracht, wie z.B. "Shell-Abfrage" (oder Plural "Shell-Abfragen")?


Des Wei­te­ren fehlt meiner Meinung nach im Artikel ein Hinweis auf die Skripte, etwa so wie in Bash (Abschnitt „Skripte“):

Skripte

Viele Aufgaben lassen sich mit Hilfe von Bash-Skripten automatisieren. Unter Skripte wird eine Beispielsammlung mit Skripten zusammengetragen. Wer selbst in das Thema einsteigen möchte, sollte sich den Artikel Shell/Bash-Skripting-Guide für Anfänger anschauen.


Die Reihenfolge der Abschnitte nach "Befehlsübersicht" sollte meiner Meinung nach so aussehen:

Skripte
Anwendungen
Shell-Abfrage(n)
Links

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

der Artikel ist ein allg. Übersichtsartikel zu den verschiedenen Shells. Alles, was mit Skripten für verschiedenen Shells zu tun hat, gehört in die jeweiligen Artikel. Ein Verweis auf Bash-Skripte ist IMHO falsch bzw. irreführend, weil, Skripte, die spezifische Funktionen der Bash nutzen, nicht unbedingt in anderen Shells laufen.

Gruß, noisefloor

linux_joy

Anmeldungsdatum:
6. Februar 2008

Beiträge: 757

Wohnort: Hannover

Hallo noisefloor,

danke für Deine prompte Antwort!

Zur Sache: IMO hast Du mit dem "Ein Verweis auf Bash-Skripte ist IMHO falsch bzw. irreführend, ..." nicht so ganz unrecht, aber...:

IMO gehört zu einem Übersichtsartikel zu den verschiedenen Shells der Vollständigkeit halber auch ein Hinweis auf die Skript-Sammlung. Als Lösungs-Vorschlag möchte ich hiermit vorbringen, dass der Text abgeändert wird (ohne "Bash" und mit "z.B."):

Skripte

Viele Aufgaben lassen sich mit Hilfe von Skripten automatisieren. Unter Skripte wird eine Beispielsammlung mit Skripten zusammengetragen. Wer selbst in das Thema einsteigen möchte, sollte sich z.B. den Artikel Shell/Bash-Skripting-Guide für Anfänger anschauen.

Alternativ dazu könnte man aber auch einfach einen Link zur Skript-Sammlung in den Abschnitt "Grundlagen" einbauen – das fände ich zwar nicht so gut, es würde mir zur Not aber auch ausreichen.... ☹


Und was ist mit der eigenen Abschnitts-Überschrift, wie z.B. "Shell-Abfrage" (oder Plural "Shell-Abfragen")?

Antworten |