Estou tentando chamar python dentro de um script bash, mas o script não consegue encontrá-lo. Não programo scripts bash há mais de 30 anos, então não sou adepto da depuração de scripts bash no momento. Estou usando pyenv para selecionar a versão do python a ser usada em um diretório específico. Aqui está a configuração que estou usando:
dnessett@homelserv:~/SaltSource/scripts$ ls
python_on_root.sh
dnessett@homelserv:~/SaltSource/scripts$ cat python_on_root.sh
#!/bin/bash
sudo python "$@"
dnessett@homelserv:~/SaltSource/scripts$ pyenv local 3.10.15
dnessett@homelserv:~/SaltSource/scripts$ python --version
Python 3.10.15
dnessett@homelserv:~/SaltSource/scripts$ ./python_on_root.sh
sudo: python: command not found
Como estou usando sudo dentro do script para chamar python, aqui está a entrada em /etc/sudoers que eu esperava que permitisse que o sudo executasse o interpretador python local:
#add python to sudo list
dnessett homelserv=(root)NOPASSWD:/home/dnessett/.pyenv/versions/3.10.15/bin/python
dnessett é o nome de usuário e homelserv é o nome da máquina. O caminho após NOPASSWD é onde a versão 3.10.15 do python está localizada.
O objetivo disso é usar o script python_on_root.sh como interpretador para um projeto Eclipse/PyDev (veja: tópico do Stack Overflow ).
Como é aparente na saída dada acima, sudo não consegue encontrar python, mesmo que eu o tenha definido como o interpretador python local dentro de ~/SaltSource/scripts. Imagino que haja alguma interação entre o script e sudo que esteja impedindo que o último encontre o interpretador python pretendido.
Alguém pode ver o problema e me aconselhar como corrigi-lo?
O
PATH
sudo herda será diferente do seu e provavelmente não inclui onde o python está instalado. Você pode chamá-lo pelo caminho completo no seu script, ou seja:No entanto, pode haver outros problemas indesejados ao executar o Python como root, como suas variáveis
HOME
ePYTHONPATH
env serem diferentes, então você pode querer executarsudo -E
em vez disso. No entanto, você ainda deve apontar para o caminho completo do Python de qualquer maneira.Finalmente, você provavelmente não deve executar python como root. Provavelmente, o que quer que você esteja tentando fazer pode ser resolvido de uma forma diferente e mais correta, como alterar as permissões de arquivo/diretório para permitir que seu usuário realize as tarefas necessárias.
Dando continuidade à resposta anterior, as alterações que precisei fazer foram:
adicionar python à lista sudo
O extra
SETENV:
depoisNOPASWD:
anula a proibição de preservar o meio ambiente. Eu encontrei isso aqui: Stack Exchange Superuser postEntão, conforme especificado por jesse_b na resposta anterior, o script é modificado para ser: