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

whereMySerialiser以准备好MyAnalyser读取的形式预处理数据。

我现在想将两个 tar 文件的输出通过管道传输到MyAnalyser.

我尝试了以下但输出到达终端。

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

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

4

2 回答 2

4

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

{ tar -x --to-command MySerialiser -f MyData1.tar.xz && tar -x --to-command MySerialiser -f MyData2.tar.xz ; }  | MyAnalyser
于 2011-05-20T23:15:48.860 回答
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

于 2011-05-20T23:17:36.290 回答