Bash
將管道傳遞給需要文件名的命令
假設我有一個
foo
帶有文件名參數的命令:foo myfile.txt
. 令人討厭的是,foo
它不會從標準輸入中讀取。而不是一個實際的文件,我想將另一個命令的結果傳遞給它(實際上,pv
它將對文件進行分類並輸出一個進度表作為副作用)。有沒有辦法做到這一點?在我的花招中似乎沒有任何東西可以做到這一點。
(
foo
在這種情況下是一個 PHP 腳本,我相信它會按順序處理文件)。我正在使用 Ubuntu 和 Bash
編輯抱歉,問題描述有點不清楚,但這是我想要的答案:
pv longfile.txt | foo /dev/stdin
現在我看到它非常明顯。
如果我理解您想要正確執行的操作,您可以使用 bash 的命令替換功能來完成:
foo <(somecommand | pv)
這與
mkfifo
基於 - 的答案的建議類似,除了 bash 為您處理詳細資訊(它最終將 /dev/fd/63 之類的東西傳遞給命令,而不是正常的命名管道)。你也可以像這樣更直接地做到這一點:somecommand | pv | foo /dev/stdin
ARRAY=(`pv whatever`); for FILE in $ARRAY; do foo $FILE; done