2013-09-22 48 views
1

我需要编写一个脚本 - 最好是一个bash脚本 - 它将监听Unix域套接字,并在通过FIFO接收输入时将输出传输到日志文件。 FIFO/log结尾应该模仿ii的风格。该脚本还能够监视和响应来自FIFO的输入(例如,用于“停止”功能)。使用FIFO和日志文件桥接Unix域套接字

这是据我得到:

if [[ ! -p "in" ]]; then mkfifo "in"; fi 

while true; do 
    nc -Ul sock >> "out" 
done 

我卡在如何从FIFO中输入netcat。当我添加< "in"并尝试从另一个shell连接到套接字时,连接将被拒绝。奇怪的是,当我用普通文件替换“in”时,它工作得很好。

什么是最简单/正确的方法来做到这一点?

编辑:使用整个while块的管道具有相同的效果。

+0

那里是如何使用'in'?另一个应用程序使用了哪个应用程序? – konsolebox

+0

'in'是FIFO的名称。目前没有其他应用程序正在使用它,因为我无法正确地将它导入到“netcat”中。 – AdamHovorka

+0

我认为'nc'会保持自己,直到其他应用程序开始将输出写入'in'。 – konsolebox

回答

1

尝试使用一些“代理”输入。例如“猫”:

if [[ ! -p "in" ]]; then mkfifo "in"; fi 

(while true; do cat in; done) | (while true; do 
    nc -Ul sock >> "out" 
done) 
+0

谢谢。这工作。 – AdamHovorka