Você também pode usar gawk
(ou awk
, se os seus /etc/alternatives/awk
pontos para /usr/bin/gawk
):
ping -c 4 www.google.fr | gawk '{print strftime("%c: ") $0}'
Isso é semelhante à abordagem na resposta de Achu , mas ping
a saída do canal é canalizada em gawk
vez de um loop de shell que chama date
. Como com essa abordagem, ela funciona sem -c
, mas se você não fizer o ping parar após n pings e parar o loop com + , não imprimirá as estatísticas usuais.-c n
CtrlCping
ek@Io:~$ ping -c 4 www.google.fr | gawk '{print strftime("%c: ") $0}'
Tue 03 Jan 2017 10:09:51 AM EST: PING www.google.fr (216.58.193.99) 56(84) bytes of data.
Tue 03 Jan 2017 10:09:51 AM EST: 64 bytes from sea15s08-in-f3.1e100.net (216.58.193.99): icmp_seq=1 ttl=51 time=327 ms
Tue 03 Jan 2017 10:09:52 AM EST: 64 bytes from sea15s08-in-f3.1e100.net (216.58.193.99): icmp_seq=2 ttl=51 time=302 ms
Tue 03 Jan 2017 10:09:53 AM EST: 64 bytes from sea15s08-in-f3.1e100.net (216.58.193.99): icmp_seq=3 ttl=51 time=282 ms
Tue 03 Jan 2017 10:09:54 AM EST: 64 bytes from sea15s08-in-f3.1e100.net (216.58.193.99): icmp_seq=4 ttl=51 time=349 ms
Tue 03 Jan 2017 10:09:54 AM EST:
Tue 03 Jan 2017 10:09:54 AM EST: --- www.google.fr ping statistics ---
Tue 03 Jan 2017 10:09:54 AM EST: 4 packets transmitted, 4 received, 0% packet loss, time 3003ms
Tue 03 Jan 2017 10:09:54 AM EST: rtt min/avg/max/mdev = 282.035/315.227/349.166/25.398 ms
ek@Io:~$ ping www.google.fr | gawk '{print strftime("%c: ") $0}'
Tue 03 Jan 2017 10:10:35 AM EST: PING www.google.fr (216.58.193.99) 56(84) bytes of data.
Tue 03 Jan 2017 10:10:35 AM EST: 64 bytes from sea15s08-in-f99.1e100.net (216.58.193.99): icmp_seq=1 ttl=51 time=305 ms
Tue 03 Jan 2017 10:10:35 AM EST: 64 bytes from sea15s08-in-f99.1e100.net (216.58.193.99): icmp_seq=2 ttl=51 time=365 ms
Tue 03 Jan 2017 10:10:36 AM EST: 64 bytes from sea15s08-in-f99.1e100.net (216.58.193.99): icmp_seq=3 ttl=51 time=390 ms
Tue 03 Jan 2017 10:10:38 AM EST: 64 bytes from sea15s08-in-f99.1e100.net (216.58.193.99): icmp_seq=4 ttl=51 time=824 ms
Tue 03 Jan 2017 10:10:38 AM EST: 64 bytes from sea15s08-in-f99.1e100.net (216.58.193.99): icmp_seq=5 ttl=51 time=287 ms
^C
Isso acontece se ping
a saída é canalizada gawk
ou um while
loop de shell . O motivo é que o comando no lado direito do pipe, em vez de ping
, recebe SIGINT quando Ctrl+ Cé pressionado e ping
não sabe imprimir as estatísticas antes de terminar.
Se você executou ping
sem -c
o lado esquerdo de um tubo (como mostrado acima) e deseja finalizá-lo de forma que ainda imprima as estatísticas, em vez de pressionar Ctrl+ Cno terminal em que está sendo executado, você pode executar de outro terminal, substituindo pelo ID do processo do comando. Se você estiver executando apenas uma instância , poderá simplesmente usar .kill -INT PID
PID
ping
ping
killall -INT ping
Como alternativa, você pode substituir o ping
comando no lado esquerdo do pipe por um comando que executa um shell, relata o ID do processo desse shell e, em seguida, substitui esse shell pelo ping
comando (fazendo com que ele tenha o mesmo PID):
sh -c 'echo $$; exec ping www.google.fr' | gawk '{print strftime("%c: ") $0}'
Em seguida, a primeira linha de saída mostrará o ID do processo do ping
comando (que normalmente será diferente a cada vez). Seria assim, mas com uma data e hora diferentes e provavelmente com um ID de processo diferente:
Tue 20 Mar 2018 12:11:13 PM EDT: 7557
Em seguida, a partir de outro terminal, você pode executar kill -INT 7557
, substituindo 7557
pelo ID do processo real que você viu, para finalizar o ping
comando de forma a fazer com que ele imprima estatísticas.
(Se você tirar proveito dos recursos de controle de tarefas do seu shell , também poderá obtê-lo no mesmo terminal. Mas se você deseja copiar o texto do seu terminal sem precisar remover nenhuma parte extravagante na qual você executou comandos naquele terminal, então você deve terminar ping
de um terminal separado.)
Leitura adicional: