首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将只处理输入/输出文件的程序包含到管道中?

如何将只处理输入/输出文件的程序包含到管道中?
EN

Unix & Linux用户
提问于 2012-06-07 10:20:41
回答 3查看 148关注 0票数 3

我需要使用流水线tool1 | tool2 | tool3 | ...中的几个工具来处理图像。尽管如此,其中一个工具似乎并不是专为在管道中工作而设计的,它只以user@computer:/~# bad_tool infile.png outfile.png格式工作。

有没有办法把它包括在管道里?我真的想避免为这个唯一的程序创建文件,然后删除它们,等等。

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2012-06-07 10:42:45

如果这能让你满意的话,下面是如何使用管道来完成这个任务的建议。

假设“坏工具”的输入和输出文件可以是管道。

代码语言:javascript
复制
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 ...

如果您想要创建脚本,可以将这些部分包装成函数:

代码语言:javascript
复制
function A(){ ... }
function B(){ ... }
function C(){ ... }
# and run in background in parallel
A&
B&
C&

继续处理您的所有映像(管道、IFOF是“可重用的”),并在完成整个任务后删除它们。

代码语言:javascript
复制
rm IF OF
票数 4
EN

Unix & Linux用户

发布于 2012-06-07 10:53:13

如果管道通常是:

代码语言:javascript
复制
tool1 | tool2 | tool3

但是tool2是“坏”的,它需要两个参数(第一个是输入文件,第二个是输出文件),您可以这样重写它:

代码语言:javascript
复制
tool2 <(tool1) >(tool3)

当然,如果您的shell支持进程替换。

票数 5
EN

Unix & Linux用户

发布于 2012-06-07 12:10:00

如果这是linux,您可以

代码语言:javascript
复制
bad_tool /dev/stdin /dev/stdout

/dev/stdin/dev/stdout只是指向/proc/self/fd/{0,1}的符号链接(分别)。

票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/40210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档