.bash_profile non généré lors de l'exécution de su

41

J'ai un utilisateur, par exemple user1, qui a des modifications à son .bash_profile, l' un d'entre eux de changer le PATH, par exemple: export PATH=/some/place:$PATH. Ce changement fonctionne bien si je me connecte en tant user1que su - user1.

Mais si j'essaie d'exécuter une commande via suas root, par exemple:

su -c test.sh oracle

(test contient echo $PATH)

Il ne semble pas avoir le modifié PATH(ou la racine PATH, d'ailleurs). J'ai aussi essayé de copier .bash_profileà .profile, en vain.

Pourquoi cela arrive-t-il?

NullUser
la source
Utilisation - Connexionsu
Nikhil Mulley
1
Pour votre information - nice writeup sur les fichiers de configuration de bash hacktux.com/bash/bashrc/bash_profile~~V~~singular~~3rd
Nikhil Mulley

Réponses:

60

Utiliser susans -lou -commence bashcomme un shell interactif, mais sans connexion, qui ne lit aucun des fichiers spécifiés. Utilisez la -lou -option ou mettre la configuration pertinente en /root/.bashrc.

Résumé rapide des fichiers de configuration:

  • Shell connexion ( -l/ --loginlit) d' /etc/profileabord, puis le premier qu'il trouve de: ~/.bash_profile, ~/.bash_loginet ~/.profile.
  • Le shell ( -i) interactif mais non connecté se lit /etc/bash.bashrcet ~/.bashrc, dans cet ordre (à moins que l’ --rcfileoption ne soit utilisée et lui dit de regarder ailleurs).
  • Les shells non interactifs, par exemple démarrés depuis un autre programme sans utiliser les drapeaux -lou -i, lisent le fichier spécifié dans la BASH_ENVvariable d'environnement.
  • Lorsqu'il est exécuté en tant shque shell de connexion, il se lit /etc/profileet ~/.profile, dans cet ordre.
  • Lorsqu'il est exécuté en tant shque non-connexion interactive, il lit le fichier spécifié dans ENV.
Kevin
la source
5

Bash se comporte différemment selon qu’il croit qu’il s’agit d’un shell de connexion, c’est-à-dire du premier shell exécuté lorsque vous vous connectez à un système. Il ne lit que .bash_profiles'il s'agit d'un shell de connexion. Si vous insérez plutôt le PATHcode -changing .bashrc, il sera exécuté pour tous les shells interactifs bash, pas seulement pour les shells de connexion.

Kyle Jones
la source
0

Si vous utilisez l'environnement Gnome dans Scientific Linux 6 (ou vraisemblablement RHEL 6), démarrez un terminal. Allez à Edit-> Profile Preferences-> "Title and Command"onglet. Assurez-vous que la case "Exécuter la commande en tant que shell de connexion" est cochée. J'ai trouvé que l'application de terminal Gnome ignore mon .bash_profilesauf si je le fais.

Andrew
la source