Forum: PC-Programmierung Umgebungsvariabeln Linux


von Zesi (Gast)


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

von Andreas B. (andreas_b77)


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.

von Xunil (Gast)


Lesenswert?

Klassisch /etc/profile und dann zus. je nach Benutzer .bashrc im /home 
Verz.
Ob sich aber da alle noch daran halten?

von Joerg W. (joergwolfram)


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

von Zesi (Gast)


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

von Andreas B. (andreas_b77)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.