Назад | Перейти на главную страницу

Подача многострочного ввода STDIN в команду

У меня есть сценарий, который выводит 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 '{}').