2015-01-21 1 views
1

Я хотел бы передать многострочные результаты команды A в команду B, вызывая команду B один раз для каждой строки вывода команды A. Как и xargs, но с несколькими вызовами.Как я могу использовать результаты одной команды для вызова другой команды несколько раз?

+0

Вы можете сказать 'xargs' выполнить одно исполнение команды за слово. Он разбивает строки на слова и рассматривает каждое слово как потенциальный аргумент. Если это не сработает (пробелы в строках), вы используете цикл оболочки: '... | при чтении строки; do commandB "$ line"; done' - или написать свой собственный код (я назвал свой «xargl», для «xargs on lines»). –

+0

thnaks! почему это комментарий? также, как я могу это сделать: «Вы можете сказать xargs, чтобы выполнить одно исполнение команды за слово» –

ответ

2

Если вы хотите запустить команду B для каждой строки вывода команды A, используйте xargs с этими параметрами:

A | xargs -n1 -d'\n' B 

Объяснение:

  • -d'\n' говорит xargs лечить свой вклад одна строка за раз, а не поведение по умолчанию для деления входных данных на основе пробелов.

  • -n1 сообщает xargs для запуска B один раз для каждой строки ввода в качестве единственного аргумента.

+1

отлично - мне также пришлось разделить пробелы. вот моя последняя команда 'git branch | grep -v master | tr -d "" |/opt/local/libexec/gnubin/xargs -n1 -d '\ n' git branch -d' –

+1

(OS X xargs не имеет функции '-d', поэтому я установил xargs из macports) –

Смежные вопросы