Alimentando Entrada STDIN Multiline para Comando

3

Eu tenho um script que gera URLs SSH do repositório git, assim:

[email protected]:namespace/project.git
[email protected]:another_namespace/some_other_project.git

Eu quero executar o comando git clone (ou outros comandos) para cada linha.

Eu tentei canalizá-lo para xargs , mas ou recebo a saída em uma linha ou uma entrada de várias linhas despejada em um único comando.

Como você executa um comando arbitrário em cada linha através de um pipe?

    
por Robert Dundon 15.11.2017 / 21:26

2 respostas

2

Acontece que você pode fazer isso apenas usando um while loop no bash (adaptado de esta resposta ):

<whatever your command/output is> | while read line; do echo $line; done

Em que echo é seu comando e usa $line como a saída de cada linha, que você pode ajustar conforme necessário.

    
por 15.11.2017 / 21:36
1

Sim, é um pouco complicado, mas deixe-me mostrar-lhe este exemplo:

Aqui estão os dados de teste

$ cat a
1
2
3

Veja o que você tentou (eu acho)

$ cat a | xargs echo foo
foo 1 2 3

Veja como fazer isso funcionar usando xargs :

$ cat a | xargs -I '{}' echo foo '{}'
foo 1
foo 2
foo 3

Então, em vez de apenas colocar uma lista das URLs em xargs git clone , tente definir o marcador ( -I '{}' ) e diga ao xargs o que fazer com ele ( git clone '{}' ).

    
por 20.11.2017 / 17:16

Tags