Передача выходных данных двух процессов tar в один дочерний процесс - PullRequest
2 голосов
/ 21 мая 2011

Я могу направить две команды в одного ребенка следующим образом (Edit: на самом деле вы не можете сделать это так, смотрите ответы 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-файлы?

Ответы [ 2 ]

4 голосов
/ 21 мая 2011

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

{ tar -x --to-command MySerialiser -f MyData1.tar.xz && tar -x --to-command MySerialiser -f MyData2.tar.xz ; }  | MyAnalyser
2 голосов
/ 21 мая 2011

Я не думаю, что ваш 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 проходит по конвейеру (после успешного выполнения первого * 1009). * команда).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...