Передача выходных данных из двух процессов tar в один дочерний

#linux #shell #tar #piping

#linux #оболочка #tar #конвейерный

Вопрос:

Я могу передать две команды в один дочерний элемент следующим образом (Редактировать: на самом деле вы не можете сделать это так, смотрите Ответы сарнольда):

 (echo "1.1 2.2 3.3") amp;amp; (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) amp;amp; (tar -x --to-command MySerialiser -f MyData2.tar.xz)  | MyAnalyser
  

Могу ли я сделать это с помощью shell? или мне нужно переупаковать мои tar-файлы?

Ответ №1:

Вы делаете это неправильно (даже для первого фрагмента).

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

Ответ №2:

Я не думаю, что ваш echo пример показывает то, что вы думаете; попробуйте заменить |cat на >/dev/null :

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

Вывод из первого echo направляется прямо на терминал (который еще не перенаправлен), а вывод из второго echo проходит через конвейер (после успешного выполнения первой echo команды).

Я не думаю, что такая конструкция когда-либо приведет к тому, что вы хотите — итак, какова ваша цель в обработке выходных данных из двух tar команд в одной программе одновременно?