У меня есть сценарий, который выводит URL-адреса SSH репозитория git, например:
git@example.com:namespace/project.git
git@example.com:another_namespace/some_other_project.git
Я хочу запустить команду git clone
(или другие команды) для каждой строки.
Я пробовал подключить его к xargs
, но я получаю либо вывод в одной строке, либо многострочный ввод, сбрасываемый в одну команду.
Как запустить произвольную команду в каждой строке через конвейер?
Оказывается, вы можете сделать это, просто используя while
цикл в 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 '{}'
).