Shell

如何將僅適用於輸入/輸出文件的程序包含到管道中?

  • June 7, 2012

我需要在管道中使用多個工具處理圖像tool1 | tool2 | tool3 | ...。儘管其中一個工具似乎不是為在管道中工作而設計的,但只能以user@computer:/~# bad_tool infile.png outfile.png.

有沒有辦法將它包含到管道中?我真的想避免為這個唯一的程序創建文件然後刪除它們等等。

如果這讓你滿意,這裡是如何使用管道做到這一點的建議。

假設“badtool”的輸入和輸出文件可以是管道。

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

如果管道通常是:

tool1 | tool2 | tool3

但是 tool2 是“壞”的,它需要 2 個參數(第一個輸入文件,第二個輸出文件),你可以像這樣重寫它:

tool2 <(tool1) >(tool3)

當然,如果你的 shell 支持程序替換

引用自:https://unix.stackexchange.com/questions/40210