Umgebungsvariabeln Linux

Gast #3263112
Lesenswert?
• ▲
▼
Hallo zusammen

Ich blick nicht mehr durch.

OS Linux Ubuntu

In meiner /etc/environment steht das
1
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
2
PYTHONPATH=$PYTHONPATH:/usr/lib/python2.7/dist-packages
3
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/bin
4
ZESI=$ZESI:/home/zesi

Wenn ich nun ein env auf die Konsole schicke so bekomme ich unter 
anderem das
1
.
2
.
3
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games
4
.
5
.
6
PYTHONPATH=$PYTHONPATH:/usr/lib/python2.7/dist-packages
7
..
Wenn ich nun ein "sudo env" auf die Konsole schicke so bekomme ich unter 
anderem das
1
.
2
.
3
.
4
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
5
.
6
.
7
.
8
PYTHONPATH=$PYTHONPATH:/usr/lib/python2.7/dist-packages
9
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/bin
10
ZESI=$ZESI:/home/zesi

Ich bin der Meinung das alles was in /etc/environment steht global ist 
und in jeder Konsole bzw bei jedem USER vorhanden ist bzw vererbt wird.

Wo mache ich den Denkfehler?

Gruss und Dank Zesi
#3263175
Lesenswert?
• ▲
▼
Zesi schrieb:
> PYTHONPATH=$PYTHONPATH:/usr/lib/python2.7/dist-packages
> LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/bin

Ist schon falsch: PYTHONPATH und LD_LIBRARY_PATH bestehen aus mit 
Doppelpunkt getrennten Dateisystempfaden. $PYTHONPATH und 
$LD_LIBRRY_PATH sind aber keine Pfade.

Damit sollte offensichtlich sein, dass /etc/environment nicht von einer 
Shell interpretiert wird und damit auch keine Shell-Variablen expandiert 
werden.

Zesi schrieb:
> Ich bin der Meinung das alles was in /etc/environment steht global ist
> und in jeder Konsole bzw bei jedem USER vorhanden ist bzw vererbt wird.

/etc/environment wird von bei der Authentifizierung des Nutzers von PAM 
Modulen eingelesen (abhängig von der Konfiguration, kann auch abgestellt 
werden) und die Umgebung der neuen Session damit initialisiert. Wenn 
aber etwa eine dadurch gestartete Shell noch Initialisierungsskripte 
abarbeitet und dabei die Variablen auf andere Werte setzt, nun, dann 
sind die Werte halt anders.
#3263325
Lesenswert?
• ▲
▼
Andreas B. schrieb:
> Ist schon falsch: PYTHONPATH und LD_LIBRARY_PATH bestehen aus mit
> Doppelpunkt getrennten Dateisystempfaden. $PYTHONPATH und
> $LD_LIBRRY_PATH sind aber keine Pfade.

Das passt schon. Auf diese Weise werden an die schon existierende 
Variable $PYTHONPATH einfach weitere Pfade angehängt.

In der /etc/profile werden die Pfadvariablen abhängig von der User ID 
zusammengebaut. Die "sbin" Verzeichnisse werden nur angehängt, wenn 
UID=0 (root) ist. (nachgeschaut: SuSE 12.3)

Jörg
Gast #3263842
Lesenswert?
• ▲
▼
Danke für die Antworten

Nun weiss ich nach was suchen.

Ich denke bei diesem Ausdruck
1
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/bin
kommt es dann darauf an in welchem Kontext die Variable gebraucht wird 
so das $LD_..... aufgelöst wird.

Gruss und Dank
Zesi
#3264628
Lesenswert?
• ▲
▼
Joerg Wolfram schrieb:
> Andreas B. schrieb:
>> Ist schon falsch: PYTHONPATH und LD_LIBRARY_PATH bestehen aus mit
>> Doppelpunkt getrennten Dateisystempfaden. $PYTHONPATH und
>> $LD_LIBRRY_PATH sind aber keine Pfade.
>
> Das passt schon. Auf diese Weise werden an die schon existierende
> Variable $PYTHONPATH einfach weitere Pfade angehängt.

Das wurden sie eben nicht. Zesi hat die Werte der Variablen mit env 
ausgegeben, und da stand wortwörtlich "$PYTHONPATH" drin. Eine Shell 
würde $PYTHONPATH natürlich durch den Wert von PYTHONPATH ersetzen oder 
durch nichts, falls die Variable nicht existiert.

Das ist hier nicht passiert, weil /etc/environment nicht von einer Shell 
interpretiert wird.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren