Bash
tee
到標準輸出和程序的最佳方式
我想做這樣的事情:
echo 'foo' | tee /dev/stdout > >(cat)
標準輸出從哪裡
echo
被發送到終端和 cat 程序。有沒有更簡單的方法來做到這一點?當我執行這個:
echo 'foo' | tee >(echo 'bar')
出於某種原因,它不回顯“foo”它只回顯“bar”,為什麼?
您完全按照您展示的方式進行操作:
somecommand | tee >(othercommand)
的輸出
somecommand
將寫入othercommand
到標準輸出的輸入和標準輸出。您的
echo 'bar'
流程替換的問題在於它不關心來自tee
from的輸入echo 'foo'
,因此它只是bar
盡可能快地輸出並終止。該tee
實用程序然後嘗試寫入它,但失敗並因此PIPE
在將字元串寫入標準輸出之前終止(從接收信號)。或者,tee
可能有時間將數據寫入程序替換,在這種情況下,兩者都bar
將foo
列印在標準輸出上,這不是確定性的。您需要確保程序替換中的命令實際讀取發送給它的數據(否則,發送數據的意義何在?) 正如比利叔叔在評論中建議的那樣,這很容易在您的範例中通過讓流程替換只需使用
cat >/dev/null
(假設您對來自的數據不感興趣tee
):echo 'foo' | tee >(cat >/dev/null; echo 'bar')
或者
echo 'foo' | tee >(echo 'bar'; cat >/dev/null)
(這兩個變體只會在兩個字元串的最終輸出順序上有所不同)