¿Por qué no ejecuta xargs un comando por línea para este caso de uso?

0

Mi tarea general es hacer ping a cada servidor EC2 al que estoy conectado.

Estoy usando este comando para hacer eso:

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

Produce la salida correcta, pero no llama a xargs por línea:

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 explicación escrita de cada paso es:

  1. Ejecute netstat con el indicador -W para obtener FQDN completos y no nombres de host cortos
  2. grep para ec2
  3. cut la salida para obtener solo la columna de nombre de host
  4. sort nombres de host únicos
  5. cut el nombre de host otra vez para eliminar el número de puerto del final, por ejemplo. ec2-1-2-3.amazon.com.80 - > %código%
  6. ec2-1-2-3.amazon.com la salida a xargs cada host diez veces

Creo que estoy teniendo un problema con la variante OS X de ping porque canalizar la misma salida a xargs muestra ocho líneas:

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

Me estoy enfocando en el aspecto de xargs aquí. Esa es la única parte de esta tarea que aparentemente no funciona.

    
pregunta Freiheit 24.08.2018 - 18:10

1 respuesta

1

Resolví esto yo mismo 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

Proporciona las ocho llamadas esperadas a ping , una para cada host encontrado.

Yo pienso esta solución funciona porque el indicador -L lo limita a una línea por comando.

    
respondido por el Freiheit 24.08.2018 - 18:18

Lea otras preguntas en las etiquetas