Puoi anche usare gawk
(o awk
, se i tuoi /etc/alternatives/awk
punti /usr/bin/gawk
):
ping -c 4 www.google.fr | gawk '{print strftime("%c: ") $0}'
Questo è simile all'approccio nella risposta di Achu , ma ping
l'output viene reindirizzato gawk
invece 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 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
Ciò accade indipendentemente dal fatto che ping
l'output sia reindirizzato gawk
o un while
loop shell . Il motivo è che il comando sul lato destro della pipe, piuttosto che ping
, riceve SIGINT quando viene premuto Ctrl+ Ce ping
non sa stampare le statistiche prima di essere terminato.
Se si è eseguito ping
senza -c
sul 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 PID
PID
ping
ping
killall -INT ping
In alternativa, è possibile sostituire il ping
comando 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 ping
comando (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 ping
comando (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 7557
con l'ID processo effettivamente visualizzato, per terminare il ping
comando 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 ping
da un terminale separato.)
Ulteriori letture: