¡Te damos la bienvenida al nuevo sysarmy --help! Para recuperar tu usuario pedí un password reset.
Desafiooooooo
Alguien se anima a simplificar mi UserParam?
UserParameter=gwfibertime,ping -t2 -c1 `ifconfig re0 | awk '/inet\ / {print $2}' | awk -F "." '{print $1"."$2"."$3".1"}'` | awk -F "time=" '/64\ bytes\ from/ {print$2}' | awk '{print $1}' || echo "0"
Es para medir tiempo de respuesta del gw de una conexion de fibertel con ip dinamico.
SO: FreeBSD
Saludos
UserParameter=gwfibertime,ping -t2 -c1 `ifconfig re0 | awk '/inet\ / {print $2}' | awk -F "." '{print $1"."$2"."$3".1"}'` | awk -F "time=" '/64\ bytes\ from/ {print$2}' | awk '{print $1}' || echo "0"
Es para medir tiempo de respuesta del gw de una conexion de fibertel con ip dinamico.
SO: FreeBSD
Saludos
Este hilo ha sido cerrado.
Respuestas
Respuesta medio ladri, creo que se podría reemplazar el awk -F "." por awk -F \.
Pero es muy ladri jajajajaja
ping -c1 -t2 -q `ifconfig re0 | sed -En "s/.*inet ([0-9]+\.[0-9]+\.[0-9]+).*/\1/p"`.1 | grep ^rtt| cut -d"/" -f6
Desglosado:
`ifconfig re0 | sed -En "s/.*inet ([0-9]+\.[0-9]+\.[0-9]+).*/\1/p"`
Saco los primeros 3 octetos de la IP,trate de usar otra forma mas compacta de RegEx, pero no me tomaba bien el grupo de captura, asi que lo deje asi, mas largo, luego:
ping -c1 -t2 -q `ifconfig re0 | sed -En "s/.*inet ([0-9]+\.[0-9]+\.[0-9]+).*/\1/p"`.1
Le agrego el .1 y tiro el ping, con -q para que solo me de el header y el resumen, quedando la salida como:
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
--- 192.168.1.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.770/1.770/1.770/0.000 ms
El grep ^rtt me da solo la ultima linea:
rtt min/avg/max/mdev = 1.770/1.770/1.770/0.000 ms
Y el cut -d"/" -f5 me da la quinta columna usando como separador el /, o sea:
rtt min/avg/max/mdev = 1.770/1.770/1.770/0.000 ms
^^^^^ ---> Este numero.
Lo probe en linux, fijate en *BSD capaz que hay algun separador distinto o parametro que no es igual.
Si bsd no tiene cut podes usar sed, pero eso te lo dejo para que lo resuelvas vos
ping -t2 -c1 `ip r | grep re0.*link | rev | awk '{print $1}' | rev` | grep time | cut -d= -f4 | head -1
al user param le mandas como parametro el "ethX" y no dependes que el gw sea siempre .1
la linea de comando en limpio seria: ping -c1 -t2 -q `ip r | perl -ne 'if(m/default via (\S+) dev eth0/) {print $1}'` 2>/dev/null | perl -ne 'if(m/rtt.*\/(\d+\.\d+)\//) {$RTT=$1} END {if(defined $RTT) {print "$RTT\n"} else {print "0\n"} }'
Linux:
ping -c1 -t2 -q `ifconfig eth0 | sed -En "s/inet\ addr:(([0-9]{1,3}\.){3}).*/\1/p"`253 | tail -1 | perl -ne '(/rtt.*=\ ([0-9\.]{1,7})\/.*/ && print "$1\n") || print "0\n"'
FreeBSD:
ping -c1 -t2 -q `ifconfig re0 | sed -En "s/inet\ (([0-9]{1,3}\.){3}).*/\1/p"`253 | tail -1 | perl -ne '(/rtt.*=\ ([0-9\.]{1,7})\/.*/ && print "$1\n") || print "0\n"'
Solución:
UserParameter=gwfibertime,ping -c1 -t2 -q `ifconfig re0 | sed -n 's/^.*inet:\([^ ]*\).*$/\1/p;'` | sed -n 's,^rtt.*=[^/]*/\([^/]*\)/.*$,\1,p; t; ${ s/^.*$/0/p; };'
Uso dos "sed" one-liners, ambos con la opción "-n" para controlar qué quiero imprimir:
Siempre prefiero "iproute2" antes que "ifconfig", pero, siendo que estás en BSD, esto no es una opción. Sin embargo, aquí va el "sed" one-liner para el comando "ip":
ip -o a l dev re0 | sed -n 's/^.*inet \([^/]\+\)\/.*$/\1/p'
Además, como "iproute2" te lista todas las direcciones IP de una interfaz apropiadamente como una lista con sus respectivas etiquetas (tal como es la estructura de datos en Linux, no sé en BSD), tal vez te convenga agregar un "| head -n 1" o "| tail -n 1". Mejor aún sería conocer la etiqueta y agregarla al match de "ip". Por ejempo:
ip -o a l dev re0 label re0:1 | sed -n 's/^.*inet \([^/]\+\)\/.*$/\1/p'
EDITADO:
Escribí las expresiones regulares basándome en la salida de "ifconfig" en Linux. Según la salida de este comando en BSD, cortesía del comentario de luigibalzani, el UserParameter debería ser:
UserParameter=gwfibertime,ping -c1 -t2 -q `ifconfig re0 | sed -n 's/^.*inet \([^ ]*\).*$/\1/p;'` | sed -n 's,^rtt.*=[^/]*/\([^/]*\)/.*$,\1,p; t; ${ s/^.*$/0/p; };'
El cambio está en sustituir ":" por un espacio en blanco regular (" ") luego de "inet".