Ich habe einen Benutzer, sagen wir user1 , das Änderungen an seinem .bash_profile enthält , einer von ihnen ändert den PATH , z. B.:export PATH=/some/place:$PATH . Diese Änderung funktioniert einwandfrei, wenn ich mich als user1 anmelde oder machen Sie einen su - user1 .
Aber wenn ich versuche, einen Befehl über su auszuführen als root , z. B.:
su -c test.sh oracle
(Test enthält echo $PATH )
Es scheint nicht den modifizierten PATH zu haben (oder PATH von root , übrigens). Ich habe auch versucht, .bash_profile zu kopieren zu .profile , vergeblich.
Warum passiert das?
Akzeptierte Antwort:
Mit su ohne -l oder - startet bash als interaktive Shell ohne Anmeldung, die aus keiner der von Ihnen angegebenen Dateien liest. Verwenden Sie das -l oder - Option oder legen Sie die relevante Konfiguration in /root/.bashrc ab .
Kurze Zusammenfassung der Konfigurationsdateien:
- Login-Shell (
-l/--login) liest/etc/profilezuerst und dann das erste, was es findet:~/.bash_profile,~/.bash_login, und~/.profile. - Interaktive Shell ohne Anmeldung (
-i) liest/etc/bash.bashrcund~/.bashrc, in dieser Reihenfolge (es sei denn, die Datei--rcfileOption verwendet wird und anweist, woanders zu suchen). - Nicht interaktive Shells, z.B. aus einem anderen Programm gestartet, ohne
-lzu verwenden oder-iFlags, liest die inBASH_ENVangegebene Datei Umgebungsvariable. - Bei Ausführung als
shals Login-Shell liest es/etc/profileund~/.profile, in dieser Reihenfolge. - Bei Ausführung als
shals interaktives Nicht-Login liest es die inENVangegebene Datei .