держать трубную цепь над ssh открытой - PullRequest
2 голосов
/ 20 августа 2011

Я пытаюсь построить цепочку труб поверх ssh.

mkfifo localpipe; и на удаленной машине mkfifo remotepipe;

cat localpipe | ssh -q einstein "cat > remotepipe"

Использование echo "input;" > localpipe Я могу отправлять ввод в программу, которая читает из удаленной трубы. Но после этого удаленная труба, локальная труба и ssh-соединение будут закрыты. Есть ли способ сохранить localpipe и ssh открытыми, но закрыть remotepipe, что мне нужно для того, чтобы программа на удаленной стороне обрабатывала свой ввод?

Если это не работает с cat или какой-либо другой командой unix, могу ли я написать короткую замену cat в C для достижения этого?

localpipe также может быть закрыт, но я хочу оставить ssh открытым по соображениям скорости.

Ответы [ 2 ]

5 голосов
/ 20 августа 2011

Команда echo ... > pipe закрывает канал после того, как он закончит запись, что приводит к завершению чтения cat из него, а затем закрывается также соединение ssh. Попробуйте открыть канал с файловым дескриптором, чтобы он оставался открытым, например

exec 3>localpipe
# then ...
echo input\; >&3

Канал должен оставаться открытым, пока вы не закроете дескриптор файла с помощью exec 3>&-.

2 голосов
/ 20 августа 2011

Сначала откройте соединение, которое открывает ControlMaster, затем выполните мультиплексирование ваших выполнений через управляющий сокет, который он открывает, как объяснено в этом ответе SO .

...