.bashrc
est un fichier de configuration de bash, uniquement lorsqu'il est exécuté de manière interactive. Il n'est chargé que lorsque vous démarrez bash, pas lorsque vous exécutez un autre programme tel que sh
(pas même si bash est appelé via le nom sh
). Et il n'est chargé que lorsque bash est interactif, pas lorsqu'il exécute un script ou une commande avec -c
.
sudo sh -c 'echo $PATH'
ou sudo bash -c 'echo $PATH'
n'invoque pas un shell interactif, il .bashrc
n'est donc pas impliqué.
sudo su; echo $PATH
exécute une instance interactive du shell de root. Si c'est bash, alors ~root/.bashrc
est chargé. Cet extrait de code s'exécute echo $PATH
une fois que ce shell interactif se termine, donc tout ce qui se passe dans le shell interactif n'a aucune influence sur ce que le snippet imprime à la fin. Mais si vous tapez echo $PATH
à l'invite du shell interactif démarré par sudo su
, vous verrez la valeur définie par ~root/.bashrc
.
Puisqu'il .bashrc
est invoqué dans chaque shell interactif, pas par les shells de connexion (pas même par les shells de connexion interactifs, qui est un défaut de conception dans bash), ce n'est pas le bon endroit pour définir les variables d'environnement. À utiliser .bashrc
pour les paramètres de bash interactifs tels que les raccourcis clavier, les alias et les paramètres d'achèvement. Définissez les variables d'environnement dans les fichiers chargés lorsque vous vous connectez: ~/.pam_environment
ou ~/.profile
.
Définissez donc PATH
au .profile
lieu de .bashrc
et exécutez un shell de connexion avec sudo -i 'echo $PATH'
ou sourcez explicitement .profile
avec sudo sh -c '. ~/.profile; echo $PATH'
.
.profile
? Voulez-vous dire/root/.profile
ou/home/user/.profile
? J'ai essayé d'ajouterexport PATH=$PATH:/mydir
aux deux. Ça n'a pas marché. J'ai essayé sansexport
, ça n'a pas marché non plus.Regardez les options
-E
et-i
.-E
: Indique à la politique de sécurité que l'utilisateur souhaite conserver ses variables d'environnement existantes. La politique de sécurité peut renvoyer une erreur si l'utilisateur n'est pas autorisé à préserver l'environnement.-i
: Exécutez le shell spécifié par l'entrée de la base de données de mots de passe de l'utilisateur cible en tant que shell de connexion. Cela signifie que les fichiers de ressources spécifiques à la connexion tels que .profile ou .login seront lus par le shell. Si une commande est spécifiée, elle est transmise au shell pour exécution via l'option -c du shell. Si aucune commande n'est spécifiée, un shell interactif est exécuté. sudo tente de passer au répertoire personnel de cet utilisateur avant d'exécuter le shell. La commande est exécutée avec un environnement similaire à celui qu'un utilisateur recevra lors de la connexion. La section Environnement de commande du manuel sudoers (5) décrit comment l'option -i affecte l'environnement dans lequel une commande est exécutée lorsque la stratégie sudoers est utilisé.la source
Vous pouvez le faire
sudo bash
, qui lit lesbash
fichiers de démarrage comme indiqué dans labash
page de manuel / documentation. Veuillez noter, cependant, qu'il peut ne pas définirHOME
correctement la variable d'environnement. Cela peut être corrigé dans lebash
fichier de démarrage à l' échelle du système (dans/etc
, l'emplacement exact dépend de la distribution) - testez si la valeur$uid
est 0.la source