我尝试在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打开速度原因。
答案 0 :(得分:5)
echo ... > pipe
命令在完成写入后关闭管道,这会导致cat
读取它的终止,然后ssh连接也将关闭。尝试使用文件描述符打开管道,使其保持打开状态,如
exec 3>localpipe
# then ...
echo input\; >&3
管道应保持打开状态,直到您使用exec 3>&-
关闭文件描述符。
答案 1 :(得分:2)
首先打开一个打开ControlMaster
的连接,然后通过它打开的控件套接字复用您的执行,如this SO answer中所述。