Bash

將管道傳遞給需要文件名的命令

  • July 19, 2015

假設我有一個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

引用自:https://serverfault.com/questions/398514