.bash_profile wird beim Ausführen von su nicht bezogen

41

Ich habe einen Benutzer, sagen wir user1, die Änderungen an seiner hat .bash_profile, einer von ihnen ändert sich die PATH, zum Beispiel: export PATH=/some/place:$PATH. Diese Änderung funktioniert einwandfrei, wenn ich mich als anmelde user1oder a su - user1.

Aber wenn ich versuche, einen Befehl über suas auszuführen root, zB:

su -c test.sh oracle

(Test enthält echo $PATH)

Es scheint nicht die modifizierte PATH(oder root PATH, für diese Angelegenheit) zu haben. Ich habe auch versucht , das Kopieren .bash_profilezu .profile, ohne Erfolg.

Warum passiert dies?

NullUser
quelle
benutze --login umschalten aufsu
Nikhil Mulley
1
FYI - Nizza Writeup auf Bash-Konfigurationsdateien hacktux.com/bash/bashrc/bash_profile
Nikhil Mulley

Antworten:

60

Die Verwendung suohne -loder -startet bashals interaktive Shell ohne Anmeldung, die keine der von Ihnen angegebenen Dateien liest. Verwenden Sie die -loder -Option oder setzen die entsprechende Konfiguration in /root/.bashrc.

Schnelle Zusammenfassung der Konfigurationsdateien:

  • Login - Shell ( -l/ --login) liest /etc/profilezuerst, und dann die erste findet es aus: ~/.bash_profile, ~/.bash_login, und ~/.profile.
  • Die interaktive, aber nicht angemeldete Shell ( -i) liest /etc/bash.bashrcund ~/.bashrcin dieser Reihenfolge (sofern nicht die --rcfileOption verwendet wird und fordert sie auf, anderswo nachzuschauen).
  • Nicht interaktive Shells, die z. B. aus einem anderen Programm heraus gestartet wurden, ohne die Flags -loder zu verwenden -i, lesen die in der BASH_ENVUmgebungsvariablen angegebene Datei .
  • Wenn es als shLogin-Shell ausgeführt wird, liest es /etc/profileund ~/.profilein dieser Reihenfolge.
  • Wenn es als shinteraktives Nicht-Login ausgeführt wird, liest es die in angegebene Datei ENV.
Kevin
quelle
5

Bash verhält sich unterschiedlich, je nachdem, ob es sich um eine Login-Shell handelt, dh die erste Shell, die ausgeführt wird, wenn Sie sich bei einem System anmelden. Es wird nur gelesen, .bash_profilewenn es sich um eine Anmeldeshell handelt. Wenn Sie PATHstattdessen den Code -changing eingeben .bashrc, wird dieser für alle interaktiven Bash-Shells ausgeführt, nicht nur für Anmeldeshells.

Kyle Jones
quelle
0

Wenn Sie die Gnome-Umgebung in Scientific Linux 6 (oder vermutlich RHEL 6) verwenden, starten Sie ein Terminal. Gehen Sie zu Edit-> Profile Preferences-> "Title and Command"Registerkarte. Stellen Sie sicher, dass das Kontrollkästchen "Befehl als Anmeldeshell ausführen" aktiviert ist. Ich habe festgestellt, dass die Gnome-Terminalanwendung my ignoriert, .bash_profilesofern ich dies nicht tue.

Andrew
quelle