Anwendungen
Portal
Forum
Wiki
Ikhaya
Planet
Mehr
Anmelden

Shell

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.

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

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?

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.

Antiqua schrieb:

Also stimmt beides. Beide sind Standard bei ubuntu.

Danke :-)