2011-05-20 70 views
2

我可以管兩個命令到一個單一的孩子,像這樣(編輯:實際上,你不能像這樣做,見sarnold答案):管道輸出到一個單一的孩子

(echo "1.1 2.2 3.3") && (echo "4.4 5.5 6.6") | cat 

這輸出

1.1 2.2 3.3 
4.4 5.5 6.6 

我想做一些與tar輸出類似的東西。目前我分析存儲在一個單一的tar文件,像這樣的數據:

tar -x --to-command MySerialiser -f MyData1.tar.xz | MyAnalyser 

其中MySerialiser預處理在準備MyAnalyser閱讀形式的數據。

我現在想將兩個tar文件的輸出傳輸到MyAnalyser

我嘗試了以下,但輸出到達終端。

(tar -x --to-command MySerialiser -f MyData1.tar.xz) && (tar -x --to-command MySerialiser -f MyData2.tar.xz) | MyAnalyser 

我可以用殼做這個嗎?還是我需要重新打包我的tar文件?

回答

4

你做錯了(即使是第一個片段)。

{ tar -x --to-command MySerialiser -f MyData1.tar.xz && tar -x --to-command MySerialiser -f MyData2.tar.xz ; } | MyAnalyser 
2

我不認爲您的echo示例顯示您認爲它顯示的內容;嘗試用>/dev/null替換|cat

$ (echo "1.1 2.2 3.3") && (echo "4.4 5.5 6.6") > /dev/null 
1.1 2.2 3.3 

從第一echo輸出被直要使用的終端(尚未重定向),以及從第二echo的輸出通過管道去(在成功執行第一個echo命令)。

我不認爲這樣的結構都不會導致你想要的東西 - 所以你有什麼目標在處理來自兩個tar命令的輸出到一個程序在一次?