Подача многострочного ввода STDIN в команду
У меня есть скрипт, который выводит URL-адреса SSH репозитория git, например:
git@example.com:namespace/project.git
git@example.com:another_namespace/some_other_project.git
Я хочу запустить команду git clone
(или другие команды) для каждой строки.
Я пытался обвязать это xargs
, но я либо получаю вывод в одну строку, либо многострочный ввод сбрасывается в одну команду.
Как вы запускаете произвольную команду в каждой строке через канал?
2 ответа
Оказывается, вы можете сделать это, просто используя while
loop in bash (адаптировано из этого ответа):
<whatever your command/output is> | while read line; do echo $line; done
куда echo
ваша команда и использование $line
в качестве вывода для каждой строки, которую вы можете настроить по мере необходимости.
Да, это немного сложно, но позвольте мне показать вам этот пример:
Вот данные теста
$ cat a
1
2
3
Вот что ты попробовал (наверное)
$ cat a | xargs echo foo
foo 1 2 3
Вот как это сделать, используя xargs
:
$ cat a | xargs -I '{}' echo foo '{}'
foo 1
foo 2
foo 3
Таким образом, вместо того, чтобы просто отправить список URL-адресов xargs git clone
попробуйте определить заполнитель (-I '{}'
) и скажите xargs, что с ним делать (git clone '{}'
).