Hallo,
ich möchte Euch hiermit vielmals um Entschuldigung bitten, weil ich erst nach sooo laanger Zeit antworte 😳
BillMaier schrieb:
Hallo linux_joy schrieb:
Hallo,
ich habe vorhin mal den Abschn. PATH erweitern so bearbeitet, dass dort jetzt am Ende zusätzlich der Satz "Entsprechend muss benutzerspezifisch die Datei ~/.profile bearbeitet werden." steht. Das ist im Prinzip zwar richtig, jedoch steht dort z.B. bei Ubuntu 14.04 folgendes (am Ende):
| # set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
|
Da fehlt am Ende also das export PATH
(Die Datei ist original).
das genauso bei /etc/environment nicht benötigt wird.
Ja, aber selbstverständlich _nicht_:
Login über Textkonsole
(...)
Alternativ kann man Variablen in der Datei /etc/environment eintragen. Diese Datei wird nicht von der Shell, sondern von pam_env
ausgewertet. Man kann dort daher keine Shell-Syntax verwenden, sondern nur einfache Zeilen der Art
VARIABLE=Wert-der-Variable
wobei Wert-der-Variable
genau so übernommen wird, wie es dasteht, also mit Anführungszeichen, $
usw. Auch die Verwendung von export
ist nicht erlaubt. Änderungen in /etc/environment werden erst nach einer erneuten Anmeldung übernommen.
(Die Unterstreichung des Satzes stammt von mir.)
Wie also würdest du den Artikel hier dann ändern wollen?
Zunächst Artikel-Zitat:
Dauerhafte Änderungen
Wie gesagt gelten solche Variablen nur für die aktuelle Sitzung. Variablen lassen sich jedoch auch dauerhaft definieren.
Hinweis:
Die Variablen müssen in den Dateien auch mit dem Befehl export
definiert werden.
Zum einen:
Die Hinweis-Box müsste entweder ganz verschwinden oder aber um variablen- bzw. shell-spezifische ("login- und non-login-shell...") Besonderheiten ergänzt werden.
Zum anderen:
PATH erweitern
Am Ende wird Folgendes angefügt:
In der benutzerspezifischen Datei ~/.profile steht am Ende bereits vorinstalliert ein Shell-Konstrukt, welches prüft, ob das Verzeichnis $HOME/bin überhaupt existiert. Falls ja, dann wird der existierenden Variable PATH
am Anfang ein weiterer Suchpfad /home/<Benutzerkürzel>/bin
(durch einen Doppelpunkt getrennt) vorangestellt, wobei <Benutzerkürzel>
für den jeweiligen Benutzer-Kurznamen steht.
Im folgenden Beispiel wird diesem Shell-Konstrukt ein entsprechendes für das Verzeichnis $HOME/.local/bin vorangestellt (siehe auch pip), so dass in der Datei ~/.profile am Ende dann Folgendes steht:
# set PATH so it includes user's .local/bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
PATH="$HOME/.local/bin:$PATH"
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Falls nun beide entsprechenden Verzeichnissen existieren würden, so würde die Ausgabe von echo $PATH
am Anfang lauten:
/home/<Benutzerkürzel>/bin:/home/<Benutzerkürzel>/.local/bin:
Falls aber eine von beiden oder beide Verzeichnissen nicht existieren würden, so würde(n) der/die entsprechende(n) Suchpfad(e) dort auch nicht auftauchen!
Hinweis:
Der export
-Befehl ist in diesem Fall nicht nötig.
Falls man in diesem Fall den source ~/.profile
-Befehl verwenden würde, so würde das Verzeichnis $HOME/bin doppelt in PATH
auftauchen. Also sich lieber ab- und gleich danach wieder anmelden.
Dazu fällt mir Folgendes auf:
Änderung für einen Benutzer
(...)
Die Änderungen in der Datei ~/.profile können ohne Neustart der Bash durch folgenden Befehl übernommen werden:
Sollte es stattdessen nicht heißen:
"Die Änderungen in der Datei ~/.profile können ohne Benutzer-Ab- sowie erneute -Anmeldung durch folgenden Befehl übernommen werden:" ???
Wäre es denn überhaupt schädlich, falls die PATH-Variable bei nicht-existierendem Verzeichnis $HOME/bin erweitert würde?
Es wäre zumindest unsauber. Ob es weiter ganz schlimme Auswirkungen hat, weiß ich nicht. Kannst ja mal probieren, die PATH-Variable um ein nicht existentes (anderes) Verzeichnis zu erweitern, wenn du es genau wissen willst. Aber warum stellst du hier den Sinn und Zweck einer Systemeinstellung in Ubuntu in Frage?
Es scheint ja _nicht_ schädlich zu sein, denn die PATH-Variable würde ja bei nicht-existierendem Verzeichnis $HOME/bin durch die Shell-Abfrage
ganz einfach auch _nicht_ erweitert!
Nur zum Vergleich: Was steht denn Entsprechendes standardmäßig in ~/.profile bei Ubuntu 16.04? Steht da vor dem bin evtl. noch ein .?
Unter 17.10 jedenfalls nicht. Warum sollte?
Ich habe einmal in einem jüngeren Forums-Thread davon gelesen, dass ein Fragesteller, weil er das Verzeichnis $HOME/bin partout nicht zur Variable PATH
dazubekommen konnte, stattdessen einfach die Datei ~/.bashrc editiert hat. Daher meine Vermutung. Aber vllt. hatte er lediglich einen Neustart der Bash anstatt einer Benutzer-Ab- sowie erneuten -Anmeldung vorgenommen; siehe oben!
Wird das export PATH
also anscheinend nur bei den systemweiten Dateien benötigt?
Hmm, nicht mal da wird es konsequent gemacht:
cat /etc/profile.d/apps-bin-path.sh
# Expand the $PATH to include /snap/bin which is what snappy applications
# use
PATH=$PATH:/snap/bin
Vllt. hat das ja auch zu tun mit:
kB schrieb:
(...)
Welche Dateien bein Start einer (Bourne-like-) Shell berücksichtig werden, hängt von der Art des Aufrufs ab. Man unterscheidet login- und non-login-shell sowie interactive- und non-interactive-shell. Das ist leider eine ziemlich unübersichtliche Angelegenheit. Man sollte daher besser nur die benutzer-spezifischen Dateien unter /home/USER/ anpassen.
Die Sache mit "login- und non-login-shell sowie interactive- und non-interactive-shell" sollte aber auf jeden Fall irgendwo im Wiki genauer erklärt werden; egal ob in diesem Artikel oder z.B. in Shell, Shell/Einführung, Bash oder Bash/bashrc!