Я делаю сценарии развертывания для своего проекта, и я делаю функцию, которая должна иметь возможность запускать команды как локально, так и удаленно (на сервере через ssh) и возвращать вывод текста.
При выполнении локальной команды я легко могу узнать, завершила ли команда, ожидая ее PID. Когда я посылаю команду через открытое соединение SSH, я получаю выходные данные обратно, но я не знаю, была ли команда выполнена или команда все еще выполняется и будет генерировать больше выходных данных позже.
В настоящее время я "решил" это, открывая новое соединение с сервером для каждой команды, что само собой разумеется, крайне медленно.
Похоже, что это может быть распространенной проблемой и может иметь простое решение, возможно, даже что-то, что встроено в SSH, поэтому я спрашиваю здесь: как я могу, через открытое соединение SSH, знать, есть ли команды, которые я отправлено закончено. Если бы я мог как-то собрать код выхода, это было бы здорово.
Чтобы дать более конкретный пример, это в основном демонстрирует мою проблему в 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)