Puoi anche usare gawk(o awk, se i tuoi /etc/alternatives/awkpunti /usr/bin/gawk):
ping -c 4 www.google.fr | gawk '{print strftime("%c: ") $0}'
Questo è simile all'approccio nella risposta di Achu , ma pingl'output viene reindirizzato gawkinvece di un loop shell che chiama date. Come con questo approccio, funziona senza -c, ma se non passi per fermare il ping dopo n ping e interrompi il ciclo con + , non verranno stampate le normali statistiche.-c nCtrlCping
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
Ciò accade indipendentemente dal fatto che pingl'output sia reindirizzato gawko un whileloop shell . Il motivo è che il comando sul lato destro della pipe, piuttosto che ping, riceve SIGINT quando viene premuto Ctrl+ Ce pingnon sa stampare le statistiche prima di essere terminato.
Se si è eseguito pingsenza -csul lato sinistro di una pipe (come mostrato sopra) e si desidera terminarlo in modo tale da stampare ancora le statistiche, quindi invece di premere Ctrl+ Cnel terminale in cui è in esecuzione, è possibile eseguire da un altro terminale, sostituendo con l'ID di processo del comando. Se stai eseguendo solo un'istanza di allora potresti semplicemente usare .kill -INT PIDPIDpingpingkillall -INT ping
In alternativa, è possibile sostituire il pingcomando sul lato sinistro della pipe con un comando che esegue una shell, riporta l'ID del processo di quella shell e quindi sostituisce quella shell con il pingcomando (facendo sì che abbia lo stesso PID):
sh -c 'echo $$; exec ping www.google.fr' | gawk '{print strftime("%c: ") $0}'
Quindi la prima riga di output mostrerà l'ID di processo del pingcomando (che in genere sarà diverso ogni volta). Sarebbe simile a questo, ma con data e ora diverse e probabilmente un ID processo diverso:
Tue 20 Mar 2018 12:11:13 PM EDT: 7557
Quindi, da un altro terminale, è possibile eseguire kill -INT 7557, sostituendo 7557con l'ID processo effettivamente visualizzato, per terminare il pingcomando in modo da farlo stampare le statistiche.
(Se si sfruttano le funzionalità di controllo del lavoro della shell , è possibile farlo anche all'interno dello stesso terminale. Ma se si desidera copiare il testo dal proprio terminale senza dover rimuovere alcuna parte estranea in cui sono stati eseguiti i comandi in quel terminale, allora dovresti terminare pingda un terminale separato.)
Ulteriori letture: