#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
команд в одной программе одновременно?