保持管道链在ssh上打开

时间:2011-08-19 21:48:41

标签: c bash unix ssh pipe

我尝试在ssh上构建一个管道链。

mkfifo localpipe;和远程计算机mkfifo remotepipe;

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

使用echo "input;" > localpipe我可以将输入发送到从remotepipe读取的程序。但之后,remotepipe,localpipe和ssh-connection将被关闭。 有没有办法保持localpipe和ssh打开但关闭remotepipe,我需要这样才能让远程端的程序处理它的输入?

如果这对cat或其他一些unix命令不起作用,我可以在C中写一个短猫替换来实现这个吗?

localpipe也可能会被关闭但我想保持ssh打开速度原因。

2 个答案:

答案 0 :(得分:5)

echo ... > pipe命令在完成写入后关闭管道,这会导致cat读取它的终止,然后ssh连接也将关闭。尝试使用文件描述符打开管道,使其保持打开状态,如

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

管道应保持打开状态,直到您使用exec 3>&-关闭文件描述符。

答案 1 :(得分:2)

首先打开一个打开ControlMaster的连接,然后通过它打开的控件套接字复用您的执行,如this SO answer中所述。