Tengo un programa que está instalado en un directorio personalizado en /opt. Para que sea más fácil ejecutarlo, edité mi bashrc para agregar dicho directorio a mi ruta:
export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin
Esto funciona bien si quiero ejecutar el programa sin sudo. Sin embargo, si trato de ejecutarlo con sudo, falla con un error de "comando no encontrado".
$ sudo godi_console
sudo: godi_console: command not found
Inspeccionar la variable PATH después de usar sudo revela que no incluye la misma PATH que tengo como usuario normal:
$ sudo sh
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
¿Por qué el PATH no es el mismo? ¿Estoy haciendo algo mal? Estoy en Debian Jessie, si hace la diferencia.
Una cosa que intenté fue invocar /opt/godi/sbin/godi_console directamente, pasando la ruta absoluta al ejecutable. Desafortunadamente, eso no ayudó en este caso particular porque godi_console depende de que la RUTA esté configurada correctamente.
Respuesta aceptada:
Siempre puedes hacer:
sudo env "PATH=$PATH" godi_console
Como medida de seguridad en Debian, /etc/sudoers
tiene la secure_path
opción establecida en un valor seguro.
Tenga en cuenta que:
sudo "PATH=$PATH" godi_console
Donde sudo
trata los argumentos principales que contienen =
caracteres como asignaciones de variables de entorno por sí mismo, también funcionaría al ejecutar godi_console
con tu $PATH
(a diferencia de secure_path
) en su entorno, pero no afectaría a sudo
la ruta de búsqueda de ejecutable, por lo que no ayudaría a sudo
en encontrar que godi_console
.