Por que o sudo bash é diferente do bash regular?

1

Descrição do problema : Estou usando algo chamado play framework no meu desenvolvimento, o que requer que eu faça o script python play disponível no caminho . Daí eu crio um link simbólico em / usr / local / bin ... Agora eu escrevi um script shell (chame de status.sh ) que chama este script python como segue: play status <some values here related to my app> &> /tmp/xyz.txt e este shell script me envia o arquivo por e-mail. Isso funciona perfeitamente quando executo o script da seguinte forma: ./script.sh . No entanto, quando o script é executado como uma expressão cron todos os dias, recebo uma saída de stderr dizendo 'play: command not found'.

Por isso, fiz algumas escavações por conta própria e aqui estão as minhas descobertas:

  1. echo $PATH quando estou no shell mostra que tenho / usr / local / bin disponível para mim, portanto, posso executar com êxito o comando play status
  2. no entanto, quando eu digito sudo bash e, em seguida, echo $PATH , não tenho mais o caminho / usr / local / bin . É um conjunto limitado de pastas (uma delas sendo / usr / bin ).

Q : Por que esse comportamento ?! Não consigo entender porque o caminho é diferente. Também como uma solução alternativa você sugeriria que eu fizesse:

  • novo link simbólico de / usr / bin para / usr / local / bin (quais são os efeitos colaterais disso?)
  • remova o link sym / usr / local / bin por completo e use apenas / usr / bin
  • há uma convenção que não estou seguindo aqui para vincular novos programas e executá-los a partir de $PATH ?

Obrigado.

    
por cyberjar09 24.11.2012 / 05:15

2 respostas

3

Todos os usuários, incluindo o root, têm um conjunto de variáveis de ambiente que são aplicadas cada vez que um novo shell é aberto.

Para um usuário normal, você pode adicionar ao caminho existente editando ~ / .bashrc e colocando a linha seguinte no final:

PATH=$PATH:/mypath_to_my_files

Para root, acredito que você teria que editar /root/.bashrc. Neste caso, no entanto, provavelmente faz sentido ter certeza de que todos usuários tenham isso em seu caminho e para isso você pode usar a linha de edição acima e apenas colocá-la no final do arquivo / etc / bash .bashrc

    
por fabricator4 24.11.2012 / 05:30
2

Recomendamos que você simplesmente mova o link simbólico para / usr / bin.

    
por ShadowNinja 24.11.2012 / 05:40