Взаимодействие с удаленным хостом s sh через петлю обратной связи именованного канала - PullRequest
0 голосов
/ 30 апреля 2020

просто для взлома, я пытался посмотреть, смогу ли я запустить удаленную команду s sh, получить ее вывод, локально отреагировать на нее и отправить команды обратно на удаленный

Я просто не могу обернуть голову, почему это не работает со следующим:

 rm foobar; mkfifo foobar; ( echo echo ok ; while true; do cat foobar; done) | ssh host | awk '{if ($1 == "ok"){ print "touch makeasideeffectasproof"}else{ print "echo just something else"}}' > foobar

однако это, похоже, не работает; Тем не менее, если я выполню

rm foobar; mkfifo foobar; ( echo echo ok ; while true; do cat foobar; done) | ssh host | awk '{if ($1 == "ok"){ print "touch makeasideeffectasproof"}else{ print "echo just something else"}}'
echo just something else
echo just something else
touch makeasideeffectasproof

Кажется, это работает до сих пор, но обратная связь l oop не завершена, даже не записывая в foobar.

даже простой cat в кажется, что конец канала блокирует все

rm foobar; mkfifo foobar; ( echo echo ok ; while true; do cat foobar; done) | ssh host | awk '{if ($1 == "ok"){ print "touch makeasideeffectasproof"}else{ print "echo just something else"}}' | cat # blocks

Зачем блокировать первый и третий команды?

...