我需要使用流水线tool1 | tool2 | tool3 | ...中的几个工具来处理图像。尽管如此,其中一个工具似乎并不是专为在管道中工作而设计的,它只以user@computer:/~# bad_tool infile.png outfile.png格式工作。
有没有办法把它包括在管道里?我真的想避免为这个唯一的程序创建文件,然后删除它们,等等。
发布于 2012-06-07 10:42:45
如果这能让你满意的话,下面是如何使用管道来完成这个任务的建议。
假设“坏工具”的输入和输出文件可以是管道。
mkfifo IF
mkfifo OF
# one therminal
tool | tool2 |... tooln > IF
# second terminal
bad_tool IF OF
#third terminal
tooln+1 < OF | tool n+2 | tool n+3 ...如果您想要创建脚本,可以将这些部分包装成函数:
function A(){ ... }
function B(){ ... }
function C(){ ... }
# and run in background in parallel
A&
B&
C&继续处理您的所有映像(管道、IF和OF是“可重用的”),并在完成整个任务后删除它们。
rm IF OF发布于 2012-06-07 10:53:13
如果管道通常是:
tool1 | tool2 | tool3但是tool2是“坏”的,它需要两个参数(第一个是输入文件,第二个是输出文件),您可以这样重写它:
tool2 <(tool1) >(tool3)当然,如果您的shell支持进程替换。
发布于 2012-06-07 12:10:00
如果这是linux,您可以
bad_tool /dev/stdin /dev/stdout/dev/stdin和/dev/stdout只是指向/proc/self/fd/{0,1}的符号链接(分别)。
https://unix.stackexchange.com/questions/40210
复制相似问题