Pourquoi root ne source pas .bash_profile?

10

Chaque fois que j'essaye de me connecter en tant que root en utilisant su(pas su -), il ne se source pas .bash_profiledans le répertoire personnel de user1.

Fondamentalement, mon /var/rootrépertoire n'a pas .bash_profile, donc j'ai mis une copie de .bash_profilein /var/rootpour tester su -.

Il ne source pas automatiquement .bash_profile(in var/root) non plus.

Quoi qu'il en soit, je veux faire .bash_profile, de user1, sourced in root account automatiquement lorsque j'utilise su.

Que devrais-je faire?

(Cela a fonctionné avant! Un jour, il ne source tout simplement pas! Peut-être que quelque chose a changé les paramètres dans bash? Cela fonctionne lorsque j'entre source .bash_profileaprès la connexion.)

J'utilise Mac et OS X Yosemite.

sirion
la source

Réponses:

11

Le shell par défaut pour rootsous OS X est /bin/sh. C'est shaussi une version de bash, mais lorsqu'elle est invoquée avec le nom shBash :

tente d'imiter le comportement de démarrage des versions historiques de shaussi près que possible, tout en se conformant également à la norme POSIX.

Lorsqu'il est invoqué en tant que shell de connexion interactif, ou en tant que shell non interactif avec l' --loginoption, il tente d'abord de lire et d'exécuter des commandes à partir de /etc/profileet ~/.profile, dans cet ordre. ... un shell appelé car sh n'essaie pas de lire et d'exécuter des commandes à partir d'autres fichiers de démarrage

Autrement dit, il ne lit pas .bash_profiledu tout, qu'il ait été invoqué ou non comme shell de connexion . Vous pouvez utiliser à la .profileplace, ou même créer un lien symbolique l'un vers l'autre. Si vous lancez un shell de connexion avec su -l, .profileest chargé au démarrage, mais .bash_profilene le sera jamais.


Vous pouvez également utiliserdscl pour changer le shell de root (en notant qu'il /etc/passwdn'est pas utilisé pour déterminer le shell sous OS X). Vous pouvez vérifier le shell actuel de root avec dscl . -read /Users/root UserShell; consultez la documentation et réfléchissez bien avant de la changer en autre chose.

Une autre approche consiste simplement à modifier votre suinvocation pour forcer l'exécution bashimmédiatement.

Compte tenu de ce que vous avez dit, je recommanderais probablement le lien symbolique, mais vous souhaiterez peut-être examiner les modifications apportées par le mode POSIX de Bash et décider si vous souhaitez les avoir ou non.

Michael Homer
la source
5

Parce qu'il n'est pas considéré comme un "shell de connexion" (qui est appelé directement depuis login, ou sshd) mais comme un "shell interactif" simple. Voir ici par exemple: https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html

Forcez donc l' suutilisation de l'option de connexion, c'est-à-dire avec l' -loption:

su -l

Ou mettez votre environnement en .bashrcfichier.

myaut
la source
5

L'utilisateur root essaiera d'exécuter le fichier .bashrc au lieu du .bash_profile puisque vous n'appelez pas un shell de connexion.

Du manuel bash man bash:

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-shell startup file

Notez l' ~emplacement où le fichier .bashrc doit se trouver dans le répertoire principal de l'utilisateur root.

Pour réellement répondre à votre question, si vous souhaitez utiliser le fichier .bashrc de user1, je vous suggère de créer un lien (symbolique) entre le .bashrc source de user1 à l'utilisateur root.

Vous pouvez également envisager de rechercher . /homedirectory/of/user1/.bash_profilele fichier user1 .bashrc ou même .bash_profile en ajoutant la ligne au fichier .bashrc de l'utilisateur root.

Lambert
la source