Puoi controllare perché (è diverso) eseguendo sudo sudo -V.
Ad esempio, su Linux, eseguire:
$ sudo sudo -V | grep PATH
Value to override user's $PATH with: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Nota: su MacOS / BSD, basta eseguire: sudo sudo -V.
L'elenco sopra è limitato a causa del plug-in della politica di sicurezza predefinito in alcune distribuzioni Linux.
Questo è ulteriormente spiegato in man sudoers:
Se l' secure_pathopzione è impostata, il suo valore verrà utilizzato per la PATHvariabile di ambiente.
secure_path- Percorso utilizzato per ogni comando eseguito da sudo. Se non ti fidi che le persone che eseguono sudo dispongano di una PATHvariabile d'ambiente sana , potresti voler usare questo.
Un altro uso è se si desidera che il "percorso radice" sia separato dal "percorso utente". Gli utenti nel gruppo specificato exempt_groupdall'opzione non sono interessati da secure_path. Questa opzione non è impostata per impostazione predefinita.
In tal caso, puoi cambiarlo eseguendo sudo visudoe modificando il file di configurazione e modificando il tuo secure_path(aggiungendo un percorso aggiuntivo separato da :) o aggiungendo il tuo utente exempt_group( in modo da non essere influenzato dalle secure_pathopzioni).
O per passare PATHtemporaneamente l'utente , è possibile eseguire:
sudo env PATH="$PATH" my_command
e puoi verificarlo tramite:
sudo env PATH="$PATH" env | grep ^PATH
Vedi anche: Come sudoconservare $PATH?
Un altro motivo per cui l'ambiente potrebbe essere diverso sudoè perché potresti avere l' env_resetopzione abilitata nel tuo sudoersfile. Questo fa sì che i comandi vengano eseguiti con un nuovo ambiente minimo.
Quindi puoi usare l' env_keepopzione (non raccomandato per motivi di sicurezza ) per preservare le variabili d'ambiente del tuo utente:
Defaults env_reset
Defaults env_keep += "PATH PYTHONPATH"