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 .