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

Re: Wo in Debian global $PATH setzen



Martin Steigerwald <Martin@lichtvoll.de> (Mo 07 Jan 2013 14:02:14 CET):
> Am Montag, 7. Januar 2013 schrieb Heiko Schlittermann:
> > Martin Steigerwald <Martin@lichtvoll.de> (Mo 07 Jan 2013 13:17:34 CET):
> > > Alternativ halt dann doch Shell-Spezifisch in:
> > > /etc/bash.bashrc
> > 
> > In den rc-Files hat das eigentlich nichts zu suchen, meine ich.
> > Umgebungsvariablen werden vererbt, müssen also nur rechtzeitig gesetzt
> > werden. Die rc-Files werden bei jeder interaktiven Shell gelesen, wenn
> > sie keine Login-Shell ist.
> 
> Hmmm, ja. Und selbst wenn sie eine ist:
> 
> martin@merkaba:~> grep bashrc .bash_profile
> # include .bashrc if it exists
> #if [ -f ~/.bashrc ]; then
> #    source ~/.bashrc
> if [ -e ~/.bashrc ]
>   # execute .bashrc if it exists.
>   . ~/.bashrc
> martin@merkaba:~> grep bashrc /etc/profile 
>     # The file bash.bashrc already sets the default PS1.
>     if [ -f /etc/bash.bashrc ]; then
>       . /etc/bash.bashrc
> 
> Nun, PATH ist in /etc/profile definiert und nicht in der /etc/bash.bashrc, 
> also scheint Upstream Deine Meinung zu teilen.

Schön. Und das Sourcen der rc-Files machen die Login-Shells über die
profile-Dateien, sonst würden die rc-Files nicht gelesen werden und
Funktionen (die normalerweise nicht vererbt werden, ebensowenig wie
Aliase) würden in der Login-Shell nicht zur Verfügug stehen. Wäre auch
wieder blöd.

> > Die Shell im Terminal zu einer Login-Shell zu machen, ist eine gute
> > Sache, der neue PATH gilt dann aber eben nur für Kinder von Prozessen im
> > Terminal (und natürlich die Shell im Terminal selbst.
> 
> Warum? De facto ist sie doch keine. Ich habe mich nicht extra mit für die 
> Shell anmelden müssen.

Ja, darum ist ja bei vielen Terminals die Shell keine Login-Shell. Das
mit der der Login-Shell im Terminal ist m.E. nur, um eben dieses Problem
mit Umgebungsvariablen zu „fixen“.


> > Wenn Du es in der gesamten X-Umgebung brauchst, solltest Du es in einem
> > der Scripte der XSession unterbringen.
> 
> Ich hab Pfad-Anpassungen für mich persönlich einfach in der ~/.zshrc
> 
> Ja, ist vielleicht auch nicht der optimale Ort, doch ich bin da irgendwann 
> ausgestiegen bei der verschachtelten Logik, wer da was wann einbindet.

Bei der zsh weiß ich nicht, wie es geht. Bei der Bash ist es einfach:

    Login-Shell: /etc/profile¹
                 ~/.bash_profile|~/.bash_login|~/.profile ¹
                 von 
                 …
                 ~/.bash_logout


    Interaktiv (keine Login-Shell):
                 /etc/bash.bashrc
                 ~/.bashrc

    andere:     $BASH_ENV kann den Namen einer zu lesenden Datei enthalten

¹) In diesen Files sollte ausdrüclich /etc/bash.bashrc respektive
   ~/.bashrc gelesen werden.

Was gehört wohin?

    In die profile-Files: Alles, was wir vererben können, i.d.R.
    Umgebungsvariablen, umask

    In die rc-Files: Der Rest, also Funktionen, Aliase

> > > Inwieweit allerdings /etc/profile shell-übergreifend funktioniert, ist
> > > mir nicht ganz klar. Denn man zshall erwähnt nur Z-Shell-spezifische
> > > Konfigurationsdateien. Könnte also sein, dass es so oder so
> > > shell-spezifisch ist, und dann würde ich die rc/env-Dateien
> > > bevorzugen, damit es auch für Nicht-Login-Shells passt.

Ich hatte gerade irgendwo gefunden, daß bei der Zsh das ausdrücklich
gemacht werden muß, wenn man an /etc/profile interessiert ist.

> > Nicht-Login-Shells sind eigentlich immer (mehr oder weniger direkte)
> > Kinder von Login-Shells und sollten die Umgebung geerbt haben.
> 
> Demnach müsste der Pfad aber auch in X11 gesetzt sein. Zumindest eine KDE-
> Sitzung wird über ein Shell-Skript hochgefahren. Und auch mit anderen Setups 
> dürften Shell-Skripte die Hauptrolle spielen. Bei Matthias hat aber 
> irgendetwas diese Vererbungslogik unterbrochen.

Wenn ein Shell-Script die Sitzung hochfährt, ist diese Shell noch lange
keine Login-Shell oder interaktive Shell. Es ist einfach nur eine Shell
und interessiert sich für $BASH_ENV respl. $ENV (wenn sie /bin/sh hieß).

> > > Ich dachte eigentlich sei /etc/environment für sowas auch gedacht, aber
> > > binden die anderen Dateien gar nicht ein:
…
> Hehe, korrekt oder nicht :). Ich erinnere mich noch gut an den umask-Bug-
> Report, wo es darum ging, wie man diese am besten global setzt. Mein 
> aktueller Stand und das funktioniert auf der Arbeit tatsächlich so, ist 
> pam_umask.
…
> Jow, man pam_env:
…
>        $HOME/.pam_environment
>            User specific environment file
> Das kann Matthias ja dann mal ausprobieren.

Dem habe ich nichs mehr hinzu zusetzen :)

    Best regards from Dresden/Germany
    Viele Grüße aus Dresden
    Heiko Schlittermann
-- 
 SCHLITTERMANN.de ---------------------------- internet & unix support -
 Heiko Schlittermann, Dipl.-Ing. (TU) - {fon,fax}: +49.351.802998{1,3} -
 gnupg encrypted messages are welcome --------------- key ID: 7CBF764A -
 gnupg fingerprint: 9288 F17D BBF9 9625 5ABC  285C 26A9 687E 7CBF 764A -
(gnupg fingerprint: 3061 CFBF 2D88 F034 E8D2  7E92 EE4E AC98 48D0 359B)-

Attachment: signature.asc
Description: Digital signature


Reply to: