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.

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.



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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.