ubuntuusers.de

Du betrachtest eine alte Revision dieser Wikiseite.

typische Anwendungsfälle

typische Anwendungsfälle

PATH=/usr/local/progdir:$PATH 

Beide Befehl wirken allerdings nur temporär. Um PATH dauerhaft und systemweit zu erweitern, muss die Datei /etc/environment editiert werden. Entsprechend muss benutzerspezifisch die Datei ~/.profile bearbeitet werden.

Proxy definieren

Erfolgt die Verbindung mit dem Internet über einen Proxyserver, so lässt sich dies in folgender Weise einstellen:

export http_proxy=http://mein.proxy.firma 

oder mit Portangabe

export http_proxy=http://mein.proxy.firma:3128 

Analog funktioniert das auch mit ftp_proxy für FTP.

Proxy definieren

Erfolgt die Verbindung mit dem Internet über einen Proxyserver, so lässt sich dies in folgender Weise einstellen:

# export proxy=URL
export ftp_proxy=http://ftp.example.com            # Beispiel, Name und Wert sind anzupassen!
export http_proxy=http://www.example.com:3128      # Beispiel, Name und Wert sind anzupassen! 

Natürlich funktioniert das nur, wenn das verwendete Programm auch diese UV kennt und auswertet!

PATH erweitern

Die UV PATH gibt die Verzeichnisse an, die bei einem Programmaufruf nach dem entsprechenden Programm durchsucht werden; dabei werden die einzelnen Verzeichnisse voneinander durch Doppelpunkt getrennt. Soll z.B. /usr/local/progdir zusätzlich in den Suchpfad aufgenommen werden, lässt sich dies in einer Shell durch einen der folgenden Befehle bewerkstelligen:

PATH=$PATH:/usr/local/progdir   # neues Verzeichnis zuletzt durchsuchen
PATH="/usr/local/progdir:$PATH" # neues Verzeichnis zuerst durchsuchen 

Die Anführungszeichen sind nur dann erforderlich, wenn Verzeichnisnamen Leerzeichen enthalten. Damit wird zunächst die existierende Shell-Variable PATH modifiziert. Für eine Übertragung einer Shell-Variablen in die Programmumgebung erwartet man noch das export-Kommando; dieses ist bei der Bash sowie der Dash hier jedoch nicht erforderlich, weil diese Shells im Environment bereits existierende UV mit gleichnamigen Variablen automatisch abgleicht. Andererseits schadet ein überflüssiges export auch nicht.

export PATH   # Befehl zulässig, aber bei existierender UV nicht erforderlich 

Diese Änderung wirkt nur lokal in der laufenden Instanz der Shell sowie für alle von dieser Instanz gestarteten Programme und auch nur temporär bis zur Beendigung dieser Shell.

Wenn man in jeder zukünftig von diesem Benutzer gestarteten Shell die neue Einstellung gelten soll, muss man den Befehl in eine Initialisierungsdatei schreiben:

  • Um PATH dauerhaft für einen bestimmten Benutzer zu erweitern, setzt man einen entsprechenden Befehl in die Datei ~/.profile im HOME-Verzeichnis dieses Benutzers.

  • Um PATH dauerhaft für alle Benutzer bei der Anmeldung zu setzen, kann man die Datei /etc/environment verwenden oder man kann eine Datei im Verzeichnis /etc/profile.d/ anlegen.

PATH erweitern

In der Variable PATH sind die Verzeichnisse hinterlegt, die bei einem Programmaufruf nach dem entsprechenden Programm durchsucht werden. Soll z.B. /usr/local/progdir zusätzlich in den Suchpfad aufgenommen werden, lässt sich dies folgendermaßen bewerkstelligen:

PATH=$PATH:/usr/local/progdir 

Damit wird der existierenden Variable PATH am Schluss ein weiterer Suchpfad /usr/local/progdir (durch einen Doppelpunkt getrennt) angehängt. Ein export-Kommando ist hier nicht erforderlich, weil die Shell im Environment existierende Werte automatisch aktualisiert. Da die Reihenfolge innerhalb der Variablen berücksichtigt wird (die Auswertung erfolgt von links nach rechts), kann man bei Bedarf den neuen Suchpfad auch voranstellen:

human-readable BLOCK_SIZE

Viele GNU-Programme (df, du, ls usw.) zeigen Größen in "blocks" an. Diese Anzeige, der block-Größe, kann man so abändern, das sie leichter zu lesen ist.

BLOCK_SIZE=human-readable 

Das Vererben (export) dieser Variable ist jedoch nicht ratsam, damit die Ausgabe in Shell-Skripten etc. weiterhin stimmt.

Locale

Über die Locale-Umgebungsvariablen lassen sich Meldungen in Landessprache (Ausgabe und Fehlermeldungen) von Programmen einstellen.

LANG=de_DE.UTF-8
export LANG 

Im folgenden Beispiel wird ein einzelnes Programm explizit mit einer anderen als der Systemsprache gestartet (hier in Englisch):

LANG=en_US.UTF-8 PROGRAMM 

Ab Ubuntu 14.04:

LANGUAGE=de PROGRAMM 

Für deutsche Schrift innerhalb eines Programmes.

Programmkontext manipulieren

Einem Programm können beim Aufruf einmalig veränderte oder neue Umgebungsvariablen mitgegeben werden. Diese haben Vorrang gegenüber vererbten Werten. Vergleiche:

gcc --help 

und

LANG="en_GB.UTF-8" gcc --help 

Auf diese Weise ist es möglich, für einen spezifischen Aufruf einem Programm englischsprachige Ausgaben zu entlocken, die man z.B. in internationalen Hilfeforen verwenden kann. Die Standardlokalisierung kann mit "C" angesprochen werden:

LANG=C LC_ALL=C gcc --help 

Praxisbeispiele

UV anzeigen

Mit dem Kommando printenv kann man zu einem UV-Namen deren Wert ausgeben lassen [1]:

# printenv NAME_DER_VARIABLE ...
printenv PATH LANG USER 

Ausgabe:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
de_DE.UTF-8
klaus

Ohne Angabe eines UV-Namens zeigt printenv alle UV.

GUI identifizieren

Gelegentlich muss man abfragen, welche GUI man benutzt. Dieser Befehl erzählt, ob man X11 oder Wayland verwendet und auch welchen Desktop:

printenv | grep XDG_SESSION 

Aufruf-Hierarchie anzeigen

Mit Hilfe des Skripts env-chain kann man sich die Eltern eines Prozesses inkl. ihrer Programmumgebung anzeigen lassen:

#!/bin/bash -e
# env-chain – Zeige Eltern eines Prozesses mit Programmumgebung
# (C) 2018 Klaus Bielke kb @ ubuntuusers.de

for (( pid = ${1:-$PPID} ; 0 < pid ; pid=$( ps -o ppid= $pid | tr -d ' ' ) ))
{	ps -o ppid,pid,user,euser,command $pid
	sudo cat /proc/$pid/environ | tr '\0' '\n'
	test -v ENV_CHAIN_WAIT && read -s -n1 || true
	echo
} 

Das Skript erwartet die Prozess-Identifikation (Abk: PID) des zu untersuchenden Prozesses als Argument; bei fehlender Angabe wird die PID des dieses Skript aufrufenden Prozesses verwendet. Siehe auch Bedienhinweise im folgenden Abschnitt.

UV im Skript verwenden

Das Skript env-chain aus dem vorausgehenden Abschnitt ist auch ein Beispiel für die Verwendung von UV in Programmen: Wenn die UV ENV_CHAIN_WAIT existiert, pausiert das Skript nach jeder Ausgabe einer Programmumgebung bis es nach Tastendruck zum Mutterprozess wechselt. Dabei muss ENV_CHAIN_WAIT definiert sein, aber nicht notwendigerweise einen Wert haben. Man vergleiche die Ausgaben dieser beiden Befehle:

./env-chain
ENV_CHAIN_WAIT=   ./env-chain 

Programmumgebung konstruieren

Das Programm env konstruiert für einen Programmaufruf eine Programmumgebung aus seinen Aufrufparametern und startet ein Programm in der neuen Umgebung. Beispielsweise bewirkt der Aufruf von

env cmd=create DieAntwort=42 PATH=/usr/local/bin PROGRAMM 

aus einer Shell folgendes:

  1. Die komplette Programmumgebung der aufrufenden Shell wird kopiert.

  2. env wird mit der kopierten Programmumgebung gestartet.

  3. env schreibt seine Aufrufparameter in seine Programmumgebung.

  4. env ersetzt sich selbst (per exec) durch PROGRAMM. Damit läuft PROGRAMM in der von env konstruierten Programmumgebung.

Die Shell Bash hat diesen Mechanismus eingebaut. Auf der Kommandozeile einer Bash bzw. im Bash-Skript führt daher der Befehl

cmd=create DieAntwort=42 PATH=/usr/local/bin PROGRAMM 

zum gleichen Ergebnis (hier allerdings per fork statt exec).

Mit der Option -i kann man das Programm env anweisen, die Programmumgebung des aufrufenden Programms zu ignorieren. Man vergleiche die Ausgaben dieser beiden Befehle:

env    neue_UV= printenv
env -i neue_UV= printenv 

Programmausgabe steuern

Viele GNU-Programme (df, du, ls usw.) zeigen Größen in "blocks" an. Diese Anzeige, der block-Größe, kann man so abändern, das sie leichter zu lesen ist.

export BLOCK_SIZE=human-readable 

Bediensprache ändern

Über die Locale-Umgebungsvariablen lässt sich die Landessprache der Meldungen (Ausgabe und Fehlermeldungen) von Programmen einstellen. Man kann natürlich nur auf die im System bereitstehenden Locale umschalten:

localectl list-locales 

Normalerweise erfolgen Programmausgaben in der durch die UV LANG benutzerspezifisch angegebenen Standardsprache. Im folgenden Beispiel wird ein einzelnes Programm PROGRAMM einmalig explizit in einer anderen (hier Englisch) als der Standardsprache gestartet:

LANG=en_US.UTF-8 PROGRAMM 

Auf diese Weise ist es möglich, für einen spezifischen Aufruf einem Programm englischsprachige Ausgaben zu entlocken, die man z.B. in internationalen Hilfeforen verwenden kann. Die Standardlokalisierung eines Programms (meist Englisch) kann mit „C“ angesprochen werden:

LANG=C LC_ALL=C gcc --help 

Die dauerhafte Umschaltung der Bediensprache bis zu Beendigung dieser Shell erfolgt, indem man kein PROGRAMM angibt:

LANG=en_US.UTF-8 

Auch hier ist in der Regel wie bei PATH kein export erforderlich. Falls man irgendwann wieder auf die normale Sprache zurück schalten möchte, merkt man sich vorher die bisher benutzte Spracheinstellung in einer Shell-Variable, z.B. old_LANG:

old_LANG=$LANG   LANG=en_US.UTF-8 

Diese Revision wurde am 23. September 2018 21:06 von BillMaier erstellt.