Подача многострочного ввода 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 '{}').

Другие вопросы по тегам