Tentando capturar apenas o tempo de retorno dos pacotes da ping
saída, emiti
$ ping 192.168.0.1 | grep -o '[^ =]* ms'
e funcionou, exibindo a hora de cada pacote quando chegou. Como eu também queria me livrar da unidade de tempo, achei que isso seria suficiente:
$ ping 192.168.0.1 | grep -o '[^ =]* ms' | grep -o '^[^ ]*'
Mas, para minha surpresa, ele trava, não mostrando saída. Substituir o primeiro comando por uma echo
linha de amostra da ping
saída, no entanto, funciona conforme o esperado (ele produz 5.07
):
$ echo '64 bytes from 192.168.0.1: icmp_seq=10 ttl=64 time=5.07 ms' | grep -o '[^ =]* ms' | grep -o '^[^ ]*'
Encontrei outros meios de obter apenas o tempo sem a unidade de milissegundos, mas ainda assim: Qual é o problema com o ping
comando? Por que passar por um tubo é bom, mas não por dois?
PS: Estes abaixo também falham, enquanto suas echo
versões são bem-sucedidas, portanto, o problema não pode ser comgrep
$ ping 192.168.0.1 | grep -o '[^ =]* ms' | sed 's_ ms__'
$ ping 192.168.0.1 | grep -o '[^ =]* ms' | cut -f 1 -d ' '
$ ping 192.168.0.1 | cut -f 7 -d ' ' | cut -f 2 -d '='