Quando capturo a saída de uma chamada SSH remota usando cat, seja no bash ou no Python, as coisas funcionam conforme o esperado.
Por exemplo, isso funciona muito bem:
import subprocess
rc = subprocess.getoutput(“ssh user@host; cat /proc/meminfo”)
print(rc)
>> MemTotal: 2048212 kB
MemFree: 202168 kB
MemAvailable: 1578308 kB
Buffers: 240876 kB
Cached: 1073456 kB
SwapCached: 0 kB
Active: 1049444 kB
…etc
No entanto, isso não rende nada:
import subprocess
rc = subprocess.getoutput(“ssh user@host; echo $SHELL”)
>>
Mesmo que o SSHing na máquina como o mesmo usuário e digitando “echo $SHELL” funcione e saia para stdout.
O que estou perdendo aqui?
Nas minhas anotações tenho o seguinte comentário:
Se você quiser disponibilizar qualquer variável de ambiente local para uso no script de shell, inicie o script usando o comando exec.
A execução do script diretamente do prompt de comando gera um novo subshell para o script, tornando quaisquer variáveis de ambiente locais no shell não disponíveis para o script.
Preciso usar 'exec' para que esses env vars sejam disponibilizados a partir de uma execução de comando remoto?
Observe que esta não é apenas uma pergunta do Python ou apenas uma pergunta do RHEL8; é reproduzível em outras variantes do Linux, incluindo o Ununtu.
Obrigado.