[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: bash liest weder .profile noch .bash_profile ein



Andreas Pakulat <apaku@gmx.de> writes:

>On 26.Oct 2004 - 02:06:34, Helmut Waitzmann wrote:
>> Andreas Pakulat <apaku@gmx.de> writes:
>> 
>> >Schreib sie in die $HOME/.bashrc, dann werden sie immer eingelesen...
>> 
>> Nein.  Dann werden sie von allen interaktiven nicht-login-shells
>> eingelesen; nicht-interaktive nicht-login-shells lesen kein "~/.bashrc".
>
>Und? Die lesen auch keine .profile oder /etc/profile .

Genau.  Darum ist es Unsinn, zu sagen "Nimm ~/.bashrc, das wird immer
eingelesen."  Denn das stimmt bei nicht-interaktiven shells nicht.

Und weil das erste Shell-Skript, das bei einem grafischen login
unter der Kennung des angemeldeten Benutzers gestartet wird, nun einmal
von einem nicht-interaktiven shell gelesen wird (interaktive shells gibt
es dann erst in Terminal-Emulatoren), kann man ihm nur auf die Weise eine
ordentliche Konfiguration verpassen, dass man es zum login-shell macht.

Die Auswahl "KDE" im Sessions-Menü des GDM, "/etc/gdm/Sessions/KDE",
macht es richtig:  Das shell script beginnt mit folgender Zeile:

   #!/bin/bash -login

Das ist ein (nicht-interaktives) Login-bash-Skript, das beim Start
zunächst /etc/profile und danach "$HOME/.bash_profile" oder
"$HOME/.profile" liest.

>> >Nein, du kannst den ganzen Kram doch in eine ~/.bashrc tun und die
>> >noch in der .bash_profile sourcen. Dadurch kommst du bei jeder! Shell in
>> >den Genuss deiner Konfiguration.
>> 
>> Nein.  Nicht-interaktive nicht-login-shells bleiben da außen vor (siehe
>> manual bash(1)).
>
>Ja, aber die kannst du sowieso nicht weiter konfigurieren, weder mit
>*profile, nocht mit *bashrc. 

Genau.  Du hast es ja doch verstanden.  Darum halte ich beim startup
nicht-interaktive nicht-login-shells eines Fehlerberichtes wert.

>Nicht-interaktive nicht-login-shells sind im Normalfall Skripte, die
>saemtliche Umgebungsvariablen selbst setzen muessen...

Eigentlich nicht.  Eher sind es Skripte, die ihre Umgebungsvariablen
bereits fertig in der Umgebung geliefert bekommen.

>> >Ich denke immernoch, das *dm keine Loginshell aufmachen, 

KDE aus der GDM-Auswahl ist ein Login-Shell, die anderen
Auswahlmöglichkeiten (Debian, Gnome, Xsession) allerdings nicht.

>> >da ja saemtliche Prozesse danach direkt an init haengen...
>> 
>> Ich sehe zwischen "keine Loginshell" und "sämtliche Prozesse direkt an
>> init hängen" keinen Zusammenhang.  Erklärst Du ihn mir?
>
>Klaro: Hab mich da etwas ungluecklich ausgedrueckt... Was ich meinte
>war: Der X11-Prozess haengt an init. Wenn man mittels startx den
>Xserver startet sieht das ganze so aus:
>
>init
>|
>|- bash -- startx -- xinit -- XFree86
>..                         |
>                           |- x-session-manager

Und das bash ist ein login shell und baut eine ordentliche Umgebung für
startx usw. auf.  Da ist also alles in Ordnung.

>Beim Login mittels eines Display-Managers haengt der X11-Server am
>Displaymanager:
>
>init
> ├─kdm─┬─XFree86
> │     └─kdm───x-session-manag─┬─gnome-settings-
> │                             ├─kwrapper
> │                             └─ssh-agent
>		    
>kdm, wiederum wird von init ausgefuehrt, als letztes der Init-Skripte
>und benutzt wiederum soweit ich das sehe eine nicht-interaktive
>nicht-login-shell.

Wenn da also kdm oder x-session-manag (ksmserver?) keine "$HOME/.profile"
entsprechende Konfigurationsmöglichkeit bietet, sieht es in der Tat nicht
gut aus.
-- 
Wenn Sie mir E-Mail schreiben, stellen |  When writing me e-mail, please
Sie bitte vor meine E-Mail-Adresse     |  precede my e-mail address with
meinen Vor- und Nachnamen, etwa so:    |  my full name, like
Helmut Waitzmann <xxx@example.net>, (Helmut Waitzmann) xxx@example.net



Reply to: