Bash Script Statement - PullRequest
       6

Bash Script Statement

2 голосов
/ 20 декабря 2011

Я пытаюсь выяснить, что означает строка в файле сценария bash:

mkfifo mypipe
nc -l 12345 < mypipe | /home/myprogram > mypipe

Вот что я понимаю: nc -l part создает поведение на стороне сервера в порту 12345, котороепринимает входные данные из mypipe, которые передают выходные данные в программу, которая направляет выходные данные программы обратно в mypipe.

Мой вопрос, во-первых, правильный ли мой анализ?Во-вторых, что такое mkfifo, что это за файл?Я также не понимаю, что именно выводит nc -l для передачи в myprogram.

Спасибо за любую помощь.

1 Ответ

3 голосов
/ 20 декабря 2011

mkfifo создает файл канала. Здесь FIFO означает «первым пришел - первым вышел». Что бы ни один процесс записывал в канал, второй процесс может читать. Это не «настоящий» файл - данные никогда не сохраняются на диск; но Linux абстрагирует множество своих механизмов в виде файлов, чтобы упростить вещи.

nc -l 12345 свяжется с сокетом 12345 и прослушает; когда он ловит входящее соединение, он передает стандартный ввод на удаленный хост, а входящие данные удаленного хоста на стандартный вывод.

Таким образом, архитектура здесь:

remote host -> nc -> regular pipe -> myprogram
myprogram -> mypipe -> nc -> remote host

эффективно позволяет myprogram и удаленному хосту общаться, хотя myprogram был разработан для чтения из stdin и записи в stdout.

Поскольку канал bash (|) обрабатывает только одно направление связи, вам необходимо создать явный второй канал для двустороннего межпроцессного соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...