我正在试图找出一行在bash脚本文件中的含义:
mkfifo mypipe
nc -l 12345 < mypipe | /home/myprogram > mypipe
这就是我所理解的:nc -l part在端口12345上创建一个类似于服务器端的行为,它接收来自mypipe的输入,mypipe将输出传递给程序,该程序将程序输出传回到mypipe。
我的问题首先是我的分析正确吗?第二,mkfifo到底是什么样的文件呢?我也不明白nc -l输出究竟是为了输入myprogram。
感谢您的帮助。
答案 0 :(得分:3)
mkfifo
创建一个管道文件。这里,FIFO意味着“先进先出”。无论一个进程写入管道,第二个进程都可以读取。它不是一个“真正的”文件 - 数据永远不会保存到磁盘;但Linux将很多机制抽象为文件,以简化操作。
nc -l 12345
将绑定到套接字12345并侦听;当它捕获传入连接时,它会将标准输入传递给远程主机,并将远程主机的传入数据传递给标准输出。
因此,这里的架构是:
remote host -> nc -> regular pipe -> myprogram
myprogram -> mypipe -> nc -> remote host
有效地让myprogram和远程主机通话,即使myprogram设计为从stdin读取并写入stdout。
由于bash管道(|
)只处理一个通信方向,因此需要使用显式的第二个管道来进行双向进程间连接。