xargs loop com variável de entrada para uso em multi-comandos

5

Eu tenho um arquivo de texto com vários endereços IP.

Gostaria de percorrer cada um deles e emitir um comando:

cat ips.txt | xargs -L 1 'ssh me@__IP__ echo "text" > file; reboot;'

Mas não tenho certeza de como passar o valor de xargs para _ IP _ .

Alguém poderia explicar como isso poderia ser feito?

    
por d-_-b 24.12.2013 / 23:51

2 respostas

8

Você não precisa de cat ou xargs para isso: basta um read em um loop:

while read -r IP;do
    ssh me@$IP echo "text" > file
    reboot
done < ips.txt

Para referência futura, o que você deseja para xargs pode ser obtido com a opção -I : você fornece um nome depois de -I e todas as instâncias desse nome no próprio comando serão substituídas pelos argumentos xargs recebe no tubo:

... | xargs -L 1 -I myip ssh me@myip 'echo "text">file;reboot'
    
por 24.12.2013 / 23:54
1

Com o GNU Parallel, você pode fazer isso em paralelo:

parallel --slf ips.txt --nonall 'echo "text" > file; reboot;'
    
por 27.12.2013 / 21:11

Tags