J'ai besoin d'exécuter un programme installé sur/opt/godi/sbin (un répertoire personnalisé). Si j'ajoute ce répertoire à mon CHEMIN, en ajoutant la ligne suivante à mon fichier .bashrc
export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin
alors je peux essayer d'exécuter la commande très bien (sauf qu'elle échoue car elle a besoin de Sudo). Cependant, lorsque j'essaie d'utiliser Sudo:
Sudo godi_console
J'obtiens l'erreur suivante
Sudo: godi_console: command not found
L'inspection de la variable PATH après avoir utilisé Sudo révèle que cela n'inclut pas le même PATH 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 CHEMIN n'est-il pas le même? Est-ce que je fais quelque chose de mal? Je suis sur Debian Jessie et malheureusement je ne peux pas contourner le problème en passant Sudo le lien absolu vers godi_console car godi_console lui-même dépend également du PATH qui est correctement défini.
Vous pouvez toujours faire:
Sudo env "PATH=$PATH" godi_console
Par mesure de sécurité sur Debian, /etc/sudoers
a la secure_path
option définie sur une valeur sûre.
Notez que:
Sudo "PATH=$PATH" godi_console
Où Sudo
traite les principaux arguments contenant =
caractères en tant qu'assignations de variables d'environnement, fonctionneraient également lors de l'exécution de godi_console
avec votre$PATH
(par opposition à secure_path
) dans son environnement, mais n'affecterait pas le chemin de recherche de Sudo
pour l'exécutable, donc n'aiderait pas Sudo
à trouver que godi_console
.
Vous pouvez également définir le CHEMIN par défaut à /etc/sudoers
éditez le fichier en utilisant visudo
et mettez à jour la ligne comme vous le souhaitez: Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Sudo fait réinitialiser les variables env par défaut.
Consultez son manuel et son option appelée env_reset.
Il vous suffit de le désactiver dans/etc/sudoers.
Cela marche :
Sudo $(which your_command)
Exemple d'appel de mon script gps
qui répertorie les processus du GPU Nvidia:
$ Sudo gps
Sudo: gps: command not found
$ Sudo $(which gps)
PID TTY TIME CMD
9922 tty7 02:42:47 Xorg
Explication:
$ set -x;Sudo $(which gps);set +x
++ which gps
+ Sudo /home/xyztuv/myScripts/shl/gps
PID TTY TIME CMD
9922 tty7 02:42:39 Xorg
+ set +x
Sudo --preserve-env=PATH env [command]
cela remplace Secure_path de ma part
Cela a fonctionné:
Sudo "PATH=$PATH" [your command]
Ne changez pas $ PATH avec votre valeur de chemin, vous l'écrivez simplement de cette façon
exemple: $ Sudo env "PATH=$PATH" ant -f webAppConfig.xml regenWebAppConf....
Peut-être pas exactement ce que demande OP, mais cela pourrait aider:
Sudo -u the_user PATH=$PATH:/opt/godi/bin sh -c 'echo $PATH'
Cela change le PATH inside la commande sudoed.
Edit: je ne suis pas sûr de ce que je voulais dire par là, car ce qui précède est à peu près un non-sens. Utilisez plutôt ce qui suit:
Sudo -u the_user sh -c 'PATH=$PATH:/opt/godi/bin echo $PATH'