J'ai un programme qui est installé dans un répertoire personnalisé sous /opt. Pour faciliter son exécution, j'ai modifié mon bashrc pour ajouter ledit répertoire à mon chemin :
export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin
Cela fonctionne bien si je veux exécuter le programme sans sudo. Cependant, si j'essaie de l'exécuter avec sudo, il échoue avec une erreur "commande introuvable".
$ sudo godi_console
sudo: godi_console: command not found
L'inspection de la variable PATH après avoir utilisé sudo révèle qu'elle n'inclut pas le même PATH que celui que j'ai en tant qu'utilisateur normal :
$ sudo sh
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Pourquoi le PATH n'est-il pas le même ? Est-ce que je fais quelque chose de mal? Je suis sur Debian Jessie, si cela fait une différence.
Une chose que j'ai essayée était d'invoquer /opt/godi/sbin/godi_console directement, en passant le chemin absolu vers l'exécutable. Malheureusement, cela n'a pas aidé dans ce cas particulier car godi_console lui-même dépend du fait que le PATH est correctement défini.
Réponse acceptée :
Vous pouvez toujours faire :
sudo env "PATH=$PATH" godi_console
Par mesure de sécurité sur Debian, /etc/sudoers
a le secure_path
option définie sur une valeur sûre.
Notez que :
sudo "PATH=$PATH" godi_console
Où sudo
traite les arguments principaux contenant =
les caractères en tant qu'affectations de variables d'environnement par eux-mêmes, fonctionneraient également lors de l'exécution de godi_console
avec votre $PATH
(par opposition au secure_path
) dans son environnement, mais n'affecterait pas sudo
le chemin de recherche de l'exécutable, donc n'aiderait pas sudo
en trouvant que godi_console
.