Sie können auch Folgendes verwenden gawk
(oder awk
, wenn Sie /etc/alternatives/awk
darauf hinweisen /usr/bin/gawk
):
ping -c 4 www.google.fr | gawk '{print strftime("%c: ") $0}'
Dies ähnelt dem Ansatz in Achus Antwort , aber ping
die Ausgabe wird an gawk
eine Shell-Schleife weitergeleitet, die aufruft date
. Wie bei diesem Ansatz funktioniert es auch ohne -c
, aber wenn Sie Ping nicht nach n Pings anhalten und die Schleife mit + anhalten , werden die üblichen Statistiken nicht gedruckt.-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
Dies geschieht unabhängig davon ping
, ob die Ausgabe an gawk
eine Shell- while
Schleife weitergeleitet wird. Der Grund dafür ist, dass der Befehl auf der rechten Seite der Pipe statt SIGINTping
empfängt, wenn + gedrückt wird, und nicht weiß, ob die Statistik vor dem Beenden gedruckt werden soll.CtrlCping
Wenn Sie ausgeführt haben , ping
ohne -c
auf der linken Seite eines Rohres (wie oben dargestellt) und wollen , dass es in einer solchen Art und Weise zu beenden , dass es nach wie vor die Statistik gedruckt werden kann , statt Drücken Ctrl+ Cin dem Terminal , wo es läuft, könnten Sie laufen von einem anderen Terminal, ersetzt durch die Prozess-ID des Befehls. Wenn Sie nur eine Instanz von ausführen, können Sie einfach verwenden .kill -INT PID
PID
ping
ping
killall -INT ping
Alternativ können Sie den ping
Befehl auf der linken Seite der Pipe durch einen Befehl ersetzen , der eine Shell ausführt, die Prozess-ID dieser Shell meldet und diese Shell dann durch den ping
Befehl ersetzt (wodurch dieselbe PID verwendet wird):
sh -c 'echo $$; exec ping www.google.fr' | gawk '{print strftime("%c: ") $0}'
In der ersten Ausgabezeile wird dann die Prozess-ID des ping
Befehls angezeigt (die sich normalerweise jedes Mal unterscheidet). Es würde so aussehen, aber mit einer anderen Uhrzeit und einem anderen Datum und wahrscheinlich einer anderen Prozess-ID:
Tue 20 Mar 2018 12:11:13 PM EDT: 7557
Von einem anderen Terminal aus können Sie dann den Befehl ausführen kill -INT 7557
und 7557
durch die tatsächliche Prozess-ID ersetzen, die Sie gesehen haben, um den ping
Befehl so zu beenden , dass er Statistiken druckt.
(Wenn Sie die Jobsteuerungsfunktionen Ihrer Shell nutzen , können Sie dies auch innerhalb desselben Terminals erreichen. Wenn Sie jedoch Text von Ihrem Terminal kopieren möchten, ohne einen externen Teil entfernen zu müssen, in dem Sie Befehle in diesem Terminal ausgeführt haben, dann Sie sollten ping
von einem separaten Terminal aus kündigen .)
Weitere Lektüre: