我可以将两个命令传递给一个像这样的孩子(编辑:实际上你不能这样做,请参阅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文件?
答案 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
命令的输出同时处理到一个程序中是什么?