Como fazer funcionar tal comando: “$ sudo php -v”?

1

Eu instalei e trabalhei o PHP53 a partir do código-fonte.

O PATH é definido em ~/.profile da seguinte forma: export PATH=$PATH:/usr/local/php53/bin

$ php -v # works good

MAS:

$ sudo php -v # sudo: php: command not found

Eu precisava executar sudo composer self-update e isso me deu uma mensagem:

/usr/bin/env: php: No such file or directory

$ composer -v # works good (installed globally by this manual https://getcomposer.org/doc/00-intro.md#globally

Resumindo:

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

Eu tenho um problema parecido com o Apache22 apachectl , mas estou usando o caminho completo para rodar com o sudo. Mas é uma solução, e eu gostaria de saber como fazer isso funcionar em comum.

O problema é que $ sudo php -v e sudo composer self-update NÃO FUNCIONAM.

ATUALIZAÇÃO: Eu adicionei ao /root/.profile novo caminho para o PHP53:

# ~/.profile: executed by Bourne-compatible login shells.


export PATH=$PATH:/usr/local/php53/bin


if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi
fi

mesg n

Depois, reiniciei o sistema operacional e aqui estão os resultados de vários testes:

$ echo $PATH # /usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/apache2_2/bin:/usr/local/php53/bin
$ php -v # works, as before
$ sudo php -v # "sudo: php: command not found"


$ sudo su
# echo $PATH # /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games , i.e. "export PATH=$PATH:/usr/local/php53/bin" did not have effect on $PATH.
# php -v # "The program 'php' is currently not installed. You can install it by typing:
apt-get install php5-cli"
# . /root/.profile 
# php -v # "PHP 5.3.29 (cli) (built: Sep 24 2015 13:05:17) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2014 Zend Technologies

MAS:

$ sudo php -v # still, "sudo: php: command not found"

Como um pequeno alívio,

$ sudo /usr/local/php53/bin/php -v # is working 
PHP 5.3.29 (cli) (built: Sep 24 2015 13:05:17) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2014 Zend Technologies

Parece que temos pelo menos dois problemas:

  1. export $ PATH em /root/.profile não tem efeito (testado após a reinicialização do SO!)
  2. mesmo quando eu faço # . /root/.profile , sudo php -v ainda não funciona.

OS: Ubuntu 12.04 com as últimas atualizações.

    
por bannndi 26.09.2015 / 18:31

1 resposta

3

Esta é a forma como sudo define seu PATH . Basicamente, ele pegará o PATH do usuário que está chamando ou, se estiver configurado, lerá o que está definido na variável secure_path de /etc/sudoers .

Você tem duas opções:

  1. Adicione o diretório em que o binário php está localizado no caminho seguro. Corra sudo visudo , encontre esta linha:

    Defaults   secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:$
    

    e mude para

    Defaults   secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/php53/bin:$
    
  2. Simplesmente comente a linha secure_path e peça que sudo compartilhe o mesmo caminho do usuário solicitante. Esta não é a opção mais segura, é claro, mas depende de você. Para fazer isso, execute sudo visudo e adicione um # ao início da linha:

    # Defaults   secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:$
    

Salve o arquivo e saia do visudo e você poderá executar sudo php -v conforme o esperado.

    
por terdon 26.09.2015 / 18:59