Perché in questo caso d'uso non ci sono xarg che eseguono un comando per riga?

0

Il mio compito generale è di eseguire il ping di ogni server EC2 a cui mi trovo in contatto.

Sto usando questo comando per farlo:

netstat -W | grep ec2 | cut -d " " -f 18 | sort -u | cut -d "." -f 1,2,3,4 | xargs -0 -p "ping -c 10"

Produce l'output corretto, ma non chiama xargs per riga:

ping -c 10 ec2-107-20-154-211.compute-1.amazonaws.com
ec2-107-20-169-186.compute-1.amazonaws.com
ec2-13-58-191-91.us-east-2.compute.amazonaws
ec2-18-204-248-223.compute-1.amazonaws.com
ec2-18-207-50-150.compute-1.amazonaws.com
ec2-18-234-32-173.compute-1.amazonaws.com
ec2-34-192-54-86.compute-1.amazonaws.com
ec2-34-195-196-96.compute-1.amazonaws.com
ec2-34-206-216-146.compute-1.amazonaws.com
?...^C

La spiegazione scritta di ogni passaggio è:

  1. Esegui netstat con il flag -W per ottenere FQDN completi e nomi host non brevi
  2. grep per ec2
  3. cut dell'output per ottenere solo la colonna nome host
  4. sort nomi host univoci
  5. cut di nuovo il nome host per eliminare il numero di porta dalla fine, ad es. ec2-1-2-3.amazon.com.80 - > %codice%
  6. ec2-1-2-3.amazon.com l'output in xargs ogni host dieci volte

Penso di avere un problema con la variante OS X di ping perché il piping dello stesso output su xargs mostra otto righe:

netstat -W | grep ec2 | cut -d " " -f 18 | sort -u | cut -d "." -f 1,2,3,4 | wc -l
       8

Mi sto concentrando sull'aspetto xargs qui. Questa è l'unica parte di questo compito che non funziona apparentemente.

    
posta Freiheit 24.08.2018 - 18:10
fonte

1 risposta

1

L'ho risolto io stesso con:

netstat -W | grep ec2 | cut -d " " -f 18 | sort -u | cut -d "." -f 1,2,3,4 | xargs -p -L 1 ping -c 10

Fornisce le otto chiamate previste a ping , una per ciascun host trovato.

I pensa questa soluzione funziona perché il flag -L lo limita a una riga per comando.

    
risposta data 24.08.2018 - 18:18
fonte

Leggi altre domande sui tag