Estou criando scripts de implantação para o meu projeto e criando uma função que deve ser capaz de executar um comando local e remotamente (em um servidor através do ssh) e retornar a saída de texto.
Ao executar um comando local, posso saber facilmente se o comando foi concluído aguardando seu PID. Quando envio um comando por uma conexão SSH aberta, recebo a saída novamente, mas não sei se o comando saiu ou se o comando ainda está em execução e gerará mais saída posteriormente.
Atualmente, eu "resolvi" isso abrindo uma nova conexão com o servidor para cada comando, o que nem é preciso dizer que é terrivelmente lento .
Parece que isso pode ser um problema comum e pode ter uma solução simples, talvez até algo embutido no SSH, por isso estou perguntando aqui: Como posso, em uma conexão SSH aberta, saber se os comandos que eu tenho enviado estão concluídos. Se eu pudesse, de alguma forma, coletar o código de saída também seria ótimo.
Para dar um exemplo mais concreto, isso basicamente demonstra meu problema no Ruby:
io = IO.popen(["ssh", "-q", "my-server"], "r+")
io.write("some command\n")
# Sleep for some arbitrary amount of time, because I don't know when the
# command has finished :(
sleep 1
output = io.readpartial(1_000_000)
io.write("some command\n")
# Sleep for some arbitrary amount of time, because I don't know when the
# command has finished :(
sleep 1
output = io.readpartial(1_000_000)
my_command -myoptions AndParameters
) com LetsStoreInterestingPID=$?
apenas após o comando, e depois de alguns outros comandos wait $LetsStoreInterestingPID
...
Mycommnad; InterestingPID=$? ; ... ;wait $InterestingPID
como comando de várias linhas da instrução ssh? BTW você pode usarwait
?