Shell
如何將僅適用於輸入/輸出文件的程序包含到管道中?
我需要在管道中使用多個工具處理圖像
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 支持程序替換。