.bashrc
ist eine Konfigurationsdatei von bash, nur wenn sie interaktiv ausgeführt wird. Es wird nur geladen, wenn Sie bash starten, nicht, wenn Sie ein anderes Programm wie sh
(auch wenn bash über den Namen aufgerufen wird sh
) ausführen . Und es wird nur geladen, wenn bash interaktiv ist, nicht, wenn ein Skript oder ein Befehl mit ausgeführt wird -c
.
sudo sh -c 'echo $PATH'
oder sudo bash -c 'echo $PATH'
ruft keine interaktive Shell auf, .bashrc
ist also nicht beteiligt.
sudo su; echo $PATH
führt eine interaktive Instanz der root-Shell aus. Wenn das Bash ist, ~root/.bashrc
wird geladen. Dieses Snippet wird ausgeführt, echo $PATH
sobald diese interaktive Shell beendet wird. Was auch immer in der interaktiven Shell geschieht, hat keinen Einfluss darauf, was das Snippet am Ende ausgibt. Wenn Sie jedoch echo $PATH
an der Eingabeaufforderung der interaktiven Shell eingeben, die von gestartet wurde sudo su
, wird der von festgelegte Wert angezeigt ~root/.bashrc
.
Da .bashrc
in jeder interaktiven Shell kein Aufruf durch Anmeldeshells erfolgt (auch nicht durch interaktive Anmeldeshells, bei denen es sich um einen Konstruktionsfehler in der Bash handelt), ist es der falsche Ort, um Umgebungsvariablen zu definieren. Verwendung .bashrc
für interaktive Bash-Einstellungen wie Tastenzuordnungen, Aliase und Vervollständigungseinstellungen. Legen Sie Umgebungsvariablen in Dateien fest, die beim Anmelden geladen werden: ~/.pam_environment
oder ~/.profile
.
So setzte PATH
in .profile
statt .bashrc
, und entweder betreibt ein Login - Shell mit sudo -i 'echo $PATH'
oder explizit Quelle .profile
mit sudo sh -c '. ~/.profile; echo $PATH'
.