Ho un programma che è installato in una directory personalizzata in /opt. Per semplificare l'esecuzione, ho modificato il mio bashrc per aggiungere detta directory al mio percorso:
export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin
Funziona bene se voglio eseguire il programma senza sudo. Tuttavia, se provo a eseguirlo con sudo, fallisce con un errore "comando non trovato".
$ sudo godi_console
sudo: godi_console: command not found
L'ispezione della variabile PATH dopo aver usato sudo rivela che non include lo stesso PATH che ho come utente normale:
$ sudo sh
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Perché il PERCORSO non è lo stesso? Sto facendo qualcosa di sbagliato? Sono su Debian Jessie, se può fare la differenza.
Una cosa che ho provato è stata invocare direttamente /opt/godi/sbin/godi_console, passando il percorso assoluto all'eseguibile. Sfortunatamente, ciò non ha aiutato in questo caso particolare perché godi_console stesso dipende dal PERCORSO impostato correttamente.
Risposta accettata:
Puoi sempre fare:
sudo env "PATH=$PATH" godi_console
Come misura di sicurezza su Debian, /etc/sudoers
ha il secure_path
opzione impostata su un valore sicuro.
Nota che:
sudo "PATH=$PATH" godi_console
Dove sudo
tratta argomenti iniziali contenenti =
caratteri come assegnazioni di variabili di ambiente da solo, funzionerebbero anche per eseguire godi_console
con tuo $PATH
(al contrario di secure_path
) nel suo ambiente, ma non influirà su sudo
è il percorso di ricerca dell'eseguibile, quindi non aiuterebbe sudo
nel trovare quel godi_console
.