使用bash進程替換,我想同時在一個文件上運行兩個不同的命令。在這個例子中,沒有必要設想一下,「cat/usr/share/dict/words」是一個非常昂貴的操作,例如解壓50GB的文件。bash過程替換和尾部不正確的結果?
cat /usr/share/dict/words | tee >(head -1 > h.txt) >(tail -1 > t.txt) > /dev/null
該命令後我希望h.txt遏制的話,文件的第一行「A」,並t.txt包含文件「Zyzzogeton」的最後一行。
然而實際情況是,h.txt包含「A」,但t.txt包含大約5%的「argillaceo」到文件中。
爲什麼會發生這種情況?似乎無論是「尾巴」過程是提早結束還是混合起來。
運行一次像這樣的類似命令的行爲與預期:
cat /usr/share/dict/words | tee >(grep ^a > a.txt) >(grep ^z > z.txt) > /dev/null
這個命令我期望a.txt中包含所有以「A」開頭的單詞後,在z.txt包含了所有的以「z」開頭的單詞,這正是發生的事情。
那麼,爲什麼這不與「尾巴」,以及與其他命令不起作用?
我認爲這是關係到http://stackoverflow.com/questions/4489139/bash-process-substitution-and-syncing它表明,只要外層命令結束,替換退出的進程就會退出,但坦白地說,我無法證明這是目前任何命令的問題。到目前爲止已經嘗試過 –