.bashrcist 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, .bashrcist also nicht beteiligt.
sudo su; echo $PATHführt eine interaktive Instanz der root-Shell aus. Wenn das Bash ist, ~root/.bashrcwird geladen. Dieses Snippet wird ausgeführt, echo $PATHsobald 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 $PATHan der Eingabeaufforderung der interaktiven Shell eingeben, die von gestartet wurde sudo su, wird der von festgelegte Wert angezeigt ~root/.bashrc.
Da .bashrcin 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 .bashrcfür interaktive Bash-Einstellungen wie Tastenzuordnungen, Aliase und Vervollständigungseinstellungen. Legen Sie Umgebungsvariablen in Dateien fest, die beim Anmelden geladen werden: ~/.pam_environmentoder ~/.profile.
So setzte PATHin .profilestatt .bashrc, und entweder betreibt ein Login - Shell mit sudo -i 'echo $PATH'oder explizit Quelle .profilemit sudo sh -c '. ~/.profile; echo $PATH'.