Bash: comando php não encontrado quando chamado de um script executado com sudo

1

Eu tenho esse problema estranho. O comando php não é encontrado em uma situação específica.
Eu tento chamar o comando de três maneiras diferentes. Apenas um deles falha:

  1. Sendo usuário john , crio um script simples que chama php --version . Então, como usuário root , chamo esse script assim: sudo -u john ./script.sh
    Dessa forma, o comando php não foi encontrado.

  2. Sendo root , invoco o comando diretamente assim: sudo -u john php --version
    Não tem problema aqui, o comando existe.

  3. Eu chamo o script diretamente como usuário 'john': ./script.sh
    Funciona bem também.

O que está causando isso?

O problema também acontece com outros usuários, não apenas com john , e acontece apenas nessa máquina específica.
O sistema operacional é o CentOS 5.9.

EDITAR: Além disso, outros comandos como gcc , perl ou python não apresentam esse problema. O comando php é o único que encontrei até agora com o problema.

    
por GetFree 07.04.2013 / 05:17

1 resposta

3
  1. Seu script de teste não possui uma linha shebang . Não há sopa para você.
  2. O subshell que está sendo chamado pelo seu script não está usando a mesma variável PATH como seu shell interativo. Digite echo $PATH para ver sua variável de caminho atual e defina essa variável PATH no script.

Por que a variável PATH não é consistente entre os dois:

  • Porque você não está especificando a linha shebang, você não tem nenhuma garantia de que o shell sendo invocado é o mesmo que o seu shell interativo. Poderia ser sourcing diferentes arquivos de configuração inteiramente.
  • Arquivos de configuração diferentes são obtidos dependendo de como um shell é executado. Você está dentro de um shell interativo e seu script é um shell não interativo. Supondo que você esteja tentando usar bash , consulte man bash e comece a ler na seção INVOCATION , próximo ao topo do arquivo.
por 07.04.2013 / 05:41