Bash脚本声明

时间:2011-12-20 04:24:24

标签: bash unix scripting netcat mkfifo

我正在试图找出一行在bash脚本文件中的含义:

mkfifo mypipe
nc -l 12345 < mypipe | /home/myprogram > mypipe

这就是我所理解的:nc -l part在端口12345上创建一个类似于服务器端的行为,它接收来自mypipe的输入,mypipe将输出传递给程序,该程序将程序输出传回到mypipe。

我的问题首先是我的分析正确吗?第二,mkfifo到底是什么样的文件呢?我也不明白nc -l输出究竟是为了输入myprogram。

感谢您的帮助。

1 个答案:

答案 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管道(|)只处理一个通信方向,因此需要使用显式的第二个管道来进行双向进程间连接。