我正在编写一个zsh脚本,我想在其中建立SSH连接,将一些命令发送到远程主机并读取输出。
我可以做类似
的事情cat commands.list | ssh foobar.com | { process output }
然而,这将一次执行,连接将关闭。相反,我想做一些像 -
while [ some condition ]; do
write command to ssh process
read output from ssh process
make some decision about the next command to write to ssh process
do
我看过zsh redirection和zsh process substitution,但未能弄清楚如何在这里使用这些对我有利。
有一种用于阅读的<(..)形式的进程替换和用于写入的>(..)形式,但没有形式可以读取和写入两者。如果有一个我可以将过程绑定到自定义文件描述符?
我还尝试将ssh进程的stdin和stdout绑定到两个fifos(管道),但是写入(使用echo)到stdin管道也发送一个EOF(当echo进程结束时),执行一个后关闭连接写的命令
任何想法是否/如何实现我在这里尝试做的事情?
感谢。
答案 0 :(得分:1)
感谢chepner的评论。
我还发现了ssh的ControlMaster功能。 http://www.linuxjournal.com/content/speed-multiple-ssh-connections-same-server
在我的配置文件中配置,我不介意为每个远程命令再次运行ssh!