是什麼什麼是引擎蓋下發生的條件命令管道進入殼層
cat dat | tee >(wc -l) | some other command
和
cat dat | tee file | wc -l
之間的區別? 我可以理解第二個,因爲三通是將流分成一個文件和一個管道。但我對第一個感到困惑。
是什麼什麼是引擎蓋下發生的條件命令管道進入殼層
cat dat | tee >(wc -l) | some other command
和
cat dat | tee file | wc -l
之間的區別? 我可以理解第二個,因爲三通是將流分成一個文件和一個管道。但我對第一個感到困惑。
第一符號是擊4.x的(沒有或沒有在3.x的所有版本3的process substitution .x)。
As far作爲tee
而言,它給出了它所寫入的文件名(例如/dev/fd/64
)以及標準輸出;它實際上是一個管道寫入結束的文件描述符。就wc
而言,它讀取其標準輸入(它是連接到,tee
的管道的讀取端),並將其答案寫入調用管道的shell的標準輸出(而不是標準輸出tee
下降管道)。
由於>(是的bash過程substitiution, 第一行表示: 發送文件內容「DAT」到一些其他命令 而進程「WC」運行與其輸入或輸出 連接到管道其中還發送的bash的手冊頁的「DAT」
檢查「進程替換」的內容。
謝謝你的回答。如果我可能再問一個問題,過程替換如何與美元符號不同,例如$(command)(我不知道它的名字)在parens前面?例如,var = $(basename文件)可以正常工作,但var =(基本名稱文件)不會。爲什麼這樣? – Alby
'$(command)'替換被稱爲['命令替換'](http://www.gnu.org/software/bash/manual/bash.html#Command-Substitution)。不同之處在於,通常,每個命令替換都會擴展爲程序的多個參數,而每個[進程替換]結果(http://www.gnu.org/software/bash/manual/bash.html#Process-Substitution)結果在該計劃的一個參數。使用一個微弱的例子:'ls $(echo *。*)'生成許多文件名參數,而'ls <(echo *。*)'會給'ls'一個參數(當我試過'ls < *)'它迴應了'/ dev/fd/63'!)。 –
我發現這個參考對理解過程替換非常有幫助:http://tldp.org/LDP/abs/html/process-sub.html – Carl