
我記得在某處讀過(後來我忘了在哪裡)關於一種很少使用的 bash 管道類型,它可以逐行重定向輸出。換句話說,不是在最後重定向一次輸出,而是針對每個換行符重定向輸出,並多次執行接收程序。我已經查看了我能找到的所有 bash 文檔,但我無法弄清楚這個「管道」是否真的存在。
有沒有逐行管道之類的東西?當然,這個任務可以很容易地透過其他方式完成,但我很好奇是否有更優雅的方式。
答案1
我認為您正在尋找 xargs?假設我想在目錄中找到所有 .bak 檔案並刪除它們。
find . -name "*.bak" -type f -print | xargs /bin/rm -f
對於找到的每個文件,它都會透過管道傳輸結果並刪除該文件。
http://www.cyberciti.biz/faq/linux-unix-bsd-xargs-construct-argument-lists-utility/
答案2
我想你正在考慮這個工具unbuffer
。您可以使用它來停用當輸出通過管道從一個命令發送到另一個命令時發生的緩衝。
使用這樣的命令,在緩衝了一個頁面之前,您不會看到任何輸出:
$ od -c /tmp/fifo | more
您可以如下停用此自動緩衝:
$ unbuffer od -c /tmp/fifo | more
通常,unbuffer 不會從 STDIN 讀取。這簡化了unbuffer
某些情況下的使用。若要unbuffer
在管道中 使用,請使用 -p 標誌。
$ process1 | unbuffer -p process2 | process3