将两个tar进程的输出管道输入到一个子进程中

时间:2011-05-20 23:12:34

标签: linux shell tar piping

我可以将两个命令传递给一个像这样的孩子(编辑:实际上你不能这样做,请参阅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

我可以用shell做到这一点吗?还是我需要重新打包我的tar文件?

2 个答案:

答案 0 :(得分:4)

你做错了(即使是第一个片段)。

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

答案 1 :(得分:2)

我认为您的echo示例不会显示您认为的内容;尝试将|cat替换为>/dev/null

$ (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命令的输出同时处理到一个程序中是什么?