Projem için dağıtım komut dosyaları yapıyorum ve hem yerel hem de uzaktan (ssh aracılığıyla bir sunucuda) komut çalıştırıp metin çıktısını döndürmesi gereken bir işlev yapıyorum.
Yerel bir komut çalıştırırken, komutun PID'sini bekleyerek bitip bitmediğini kolayca anlayabilirim. Açık bir SSH bağlantısı üzerinden bir komut gönderdiğimde çıktıyı geri alıyorum, ancak komutun çıkıp çıkmadığını veya komutun hala çalışıyor olup olmadığını ve daha sonra daha fazla çıkış üreteceğini bilmiyorum.
Şu anda bunu, her komut için sunucuya yeni bir bağlantı açarak çözdüm, söylemeye gerek yok ki çok yavaş .
Bu yaygın bir sorun olabilir gibi görünüyor ve basit bir çözümü olabilir, belki de SSH'ye yerleşik bir şey bile olabilir, bu yüzden burada soruyorum: Açık bir SSH bağlantısı üzerinden, komutları alıp almadığımı nasıl bilebilirim? gönderilenler bitti. Bir şekilde çıkış kodunu da toplayabilseydim çok iyi olurdu.
Daha somut bir örnek vermek gerekirse, bu temel olarak Ruby'deki sorunumu göstermektedir:
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) LetsStoreInterestingPID=$? komuttan hemen sonra ve bazı komutlardan sonra yakalamak istediğinizi hayal ediyorum wait $LetsStoreInterestingPID...
Mycommnad; InterestingPID=$? ; ... ;wait $InterestingPIDssh komutunun çok satırlı komutu olarak uzun bir komut vermek (buna benzer) ? BTW kullanabilirsinizwait?