A configuração do sudo por padrão irá redefinir o caminho, independentemente de como o sudo é chamado. Aqui estão duas maneiras comuns de contornar isso, a primeira é a mudança permanente, a segunda é um argumento de linha de comando para o sudo (que você pode adicionar como um alias).
permanente & mudança global
Em /etc/sudoers
, você precisa modificar duas configurações:
sudo visudo
No arquivo sudo há por padrão uma configuração chamada Default env_reset
, que limpa as configurações ambientais do shell de chamadas do sudo, mesmo que o sudo seja chamado com -E (keep environment).
No arquivo, procure uma configuração chamada env_keep
. Isso determina quais variáveis ambientais podem ser passadas para o ambiente raiz que é criado com o sudo. Normalmente, há uma série de instruções env_keep="xxx" e env_keep +="xxx" no arquivo sudoers padrão. Por padrão, o PATH não é um dos envs permitidos para passar.
Adicione o PATH a uma dessas entradas ou comente a linha env_reset. Se você não tiver entradas env_keep, procure por Defaults env_reset
e adicione uma nova entrada env_keep = "PATH"
depois dela.
Em segundo lugar, mesmo se você permitir que a variável PATH passe para o sudo env, o caminho é limitado em sudoers pela configuração Defaults secure_path='...'
Você pode comentar essa configuração ou adicionar o caminho em que seu script está na entrada .
Depois disso, o sudo manterá a variável PATH e executará seu script.
solução de linha de comando
Para evitar a modificação do arquivo sudoers, você pode chamar o sudo com esta sintaxe:
sudo env "PATH=$PATH" <script name>