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/profile
zuerst und dann das erste, was es findet:~/.bash_profile
,~/.bash_login
, und~/.profile
. - Interaktive Shell ohne Anmeldung (
-i
) liest/etc/bash.bashrc
und~/.bashrc
, in dieser Reihenfolge (es sei denn, die Datei--rcfile
Option verwendet wird und anweist, woanders zu suchen). - Nicht interaktive Shells, z.B. aus einem anderen Programm gestartet, ohne
-l
zu verwenden oder-i
Flags, liest die inBASH_ENV
angegebene Datei Umgebungsvariable. - Bei Ausführung als
sh
als Login-Shell liest es/etc/profile
und~/.profile
, in dieser Reihenfolge. - Bei Ausführung als
sh
als interaktives Nicht-Login liest es die inENV
angegebene Datei .