Unix 包装器使任何二进制文件接受 stdin/stdout 重定向

Unix 包装器使任何二进制文件接受 stdin/stdout 重定向

这是一种常见情况:您想将命令“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

相关内容