Por que executar o comando como sudo retorna o comando não encontrado?

6

Exemplo de comando:

drush cc all

funciona, mas isso:

sudo drush cc all

me dá:

sudo: drush: command not found

Por quê? Como consertar isso?

    
por Codium 27.11.2015 / 01:03

2 respostas

10

Quando você sudo , você obtém um $PATH pré-configurado, que (supostamente) é algo como o caminho padrão do usuário do root . Seu programa não está nessa lista de diretórios identificados por $PATH .

Veja por exemplo

sudo tries to be safe when executing external commands.

There are two distinct ways to deal with environment variables. By default, the env_reset sudoers option is enabled. This causes commands to be executed with a minimal environment containing TERM, PATH, HOME, SHELL, LOGNAME, USER and USERNAME in addition to variables from the invoking process permitted by the env_check and env_keep sudoers options. There is effectively a whitelist for environment variables.

Se você não puder configurar sudo para preservar seu $PATH , a solução usual é especificar o nome do caminho completo do programa. Isso pode não funcionar bem com scripts que chamam outros executáveis no diretório (não acessado).

    
por 27.11.2015 / 01:05
0

Você deve especificar o caminho completo. Também é mais seguro; Se você não especificar o caminho, é possível que um invasor crie outro programa que será executado com permissões de root.

Além disso, você precisa colocar uma linha em /etc/sudoers para permitir isso. man sudoers para a sintaxe, é demais colocar aqui.

    
por 27.11.2015 / 01:06

Tags