2014-02-05 197 views
0

所以我得提取数据在bash脚本从命名管道

mknod fifoPipe p 
$CMDPATH/cmd outputFile=fifoPipe & 

cat fifoPipe | $CMDPATH/filterProgram > thefile.ext 

正在传递到管道出CMD的数据下面是不是文本数据,并使用猫把它弄出来的进入过滤器的管道看起来很乱,任何人对如何使这项工作“更好”有任何想法?

+0

当你执行'outputFile = -'时会发生什么? – perreal

+2

'$ CMDPATH/filterProgram < fifoPipe > thefile.ext'? – twalberg

+0

你正在使用什么'cmd'和'filterProgram'?应该'cmd'产生文本,还是预计二进制输出? “更好”是什么意思?真的是什么问题? twalberg的评论是你想要的解决方案吗?只有当多个文件被确认时才应该使用cat。你在寻找'tee'命令将其输入写入文件及其标准输出吗? – Palec

回答

1

我想问题是$ CMDPATH/cmd本身不能写入标准输出,而是需要输出文件名作为参数。我会试图这样骗过它:

$CMDPATH/cmd outputFile=/dev/stdout | $CMDPATH/filterProgram > thefile.ext 
+0

这样做的问题是,我在stdout上输出日志,在stderr上输出错误,两者都在其他地方记录下来......但这是个好主意。 – Rafe

+0

然后您可以使用进程替换:'$ CMDPATH/cmd outputFile =>($ CMDPATH/filterProgram> thefile.ext)' –

+0

再次感谢 - 我特别使用命名管道,因为管道无法通过内部程序关闭(与其他人编写的与C程序接口时出现的问题)。 – Rafe