这是一种常见情况:您想将命令“foo”作为管道的一部分,但不幸的是,命令“foo”仅接受 I/O 的实际文件名,并且不会从 stdin/stdout 读取/写入。我知道有一个 Unix 命令可以充当行为不当的命令(例如“foo”)的包装器,但我记不起它的名字了。它是什么?
答案1
假设foo
使用-i
它的输入文件和-o
它的输出文件,这应该将其转换为适合管道的程序:
previousCommand | foo -i <(cat) -o >(cat) | nextCommand
这称为进程替换,尽管不是标准,但至少在 ksh 和 bash 中都可用。
在像前面的例子这样的简单情况下,管道可以像这样减少:
foo -i <(previousCommand) -o >(nextCommand)
答案2
我想你想要先入先出,它可以创建功能类似于文件的命名管道。
例子:
mkfifo mypipe
perl mypipe & # awaits input from pipe file
echo "print 55;" > mypipe
ls -l mypipe # should be prefixed with a p denoting the inode is a pipe:
prw-r--r-- 1 user1 user1 0 Apr 18 12:10 mypipe