Dlaczego xargs nie uruchamia jednego polecenia na linię dla tego przypadku użycia?

0

Moim ogólnym zadaniem jest pingowanie każdego serwera EC2, z którym się łączę.

Używam tego polecenia, aby to zrobić:

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

Wydaje właściwe wyjście, ale nie dzwoni xargs Za linię:

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

Pisemne wyjaśnienie każdego kroku to:

  1. Uruchom netstat za pomocą -W flaga, aby uzyskać pełne nazwy FQDN i nie krótkie nazwy hostów
  2. grep dla ec2
  3. cut wyjście, aby uzyskać kolumnę nazwy hosta
  4. sort unikalne nazwy hostów
  5. cut nazwa hosta ponownie, aby usunąć numer portu z końca, np. ec2-1-2-3.amazon.com.80 - & gt; ec2-1-2-3.amazon.com
  6. xargs wyjście do ping każdy gospodarz dziesięć razy

Myślę, że mam problem z wersją systemu OS X xargs ponieważ przesyłanie tego samego wyjścia do wc -l pokazuje osiem linii:

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

Tutaj skupiam się na aspekcie xargs. To jedyna część tego zadania, która najwyraźniej nie działa.

Freiheit
źródło

Odpowiedzi:

1

Sam to rozwiązałem dzięki:

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

Zapewnia oczekiwane osiem połączeń ping, jeden dla każdego znalezionego hosta.

ja myśleć to rozwiązanie działa, ponieważ -L flaga ogranicza go do jednej linii na polecenie.

Freiheit
źródło