Estou desenvolvendo um comando de programa executável binário para executar programas e retornar a saída para um campo de texto.
Os parâmetros para o comando envolvem o próprio comando como seria digitado na linha de comando e no diretório. Portanto, a rotina que executa a operação primeiro muda para o diretório e executa o comando.
Por exemplo, se eu quiser executar o comando some.cmd
no diretório /home/user
, os parâmetros são command = 'some.cmd'
e directory = '/home/user'
.
O que eu descobri é que some.cmd
não funciona, mas se eu alterar o comando para /home/user/some.cmd
, o comando funciona. No entanto, o comando ls -l
funciona. Também percebo que o comando cd
não é reconhecido. Se eu rodar remotamente via ssh
, como definir o comando para ssh user@localhost 'cd /home/user && ./some.cmd'
, funciona.
Parece que algumas configurações que estão presentes quando o comando é executado em um shell não estão presentes quando ele é executado diretamente, mas fazê-lo via ssh
parece criar as configurações para o trabalho.
Existe alguma explicação para isso?
UPDATE:
Depois de algumas perguntas, aprendi que a API usada para executar os comandos não estava sendo executada no shell ou não era executada com o ambiente normal disponível no console. Depois de executar os comandos com a opção /bin/sh -c "cd ..."
, o problema não é mais. Este é o ambiente fazendo ssh user@localhost 'command ...'
me deu.Eu não tenho tanta certeza dos detalhes técnicos, mas, aparentemente, a existência do ambiente disponível quando você executa em seu shell normal nem sempre está disponível para comandos executados diretamente pelo sistema operacional.