を使用することもできますgawk
(またはawk
、/etc/alternatives/awk
ポイントする場合は、/usr/bin/gawk
):
ping -c 4 www.google.fr | gawk '{print strftime("%c: ") $0}'
これは、内アプローチに似てAchuの答えが、ping
の出力がにパイプされるgawk
代わりのシェルループ呼び出していますdate
。そのアプローチと同様に、それはなしで機能しますが、n pingの後にpingを停止するために-c
渡さず、+ でループを停止すると、通常の統計は出力されません。-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
これは、ping
の出力がパイプされるgawk
かシェルwhile
ループかに関係なく発生します。その理由は、パイプの右側にそのコマンドである、というよりもping
、受信SIGINTCtrl + C押され、そしてping
終了される前に統計情報を印刷するには知りませんが。
(上記のように)パイプの左側で実行ping
せず-c
に、まだ統計を出力するように終了したい場合は、実行中のターミナルでCtrl+ を押す代わりにC、実行できます。別の端末から、コマンドのプロセスIDに置き換えます。1つのインスタンスのみを実行している場合は、単に使用できます。kill -INT PID
PID
ping
ping
killall -INT ping
または、ping
パイプの左側にあるコマンドをシェルを実行するコマンドに置き換え、そのシェルのプロセスIDを報告し、そのシェルをping
コマンドで置き換えます(同じPIDを持つようにします)。
sh -c 'echo $$; exec ping www.google.fr' | gawk '{print strftime("%c: ") $0}'
次に、出力の最初の行には、ping
コマンドのプロセスIDが表示されます(通常は毎回異なります)。次のようになりますが、時刻と日付が異なり、おそらくプロセスIDも異なります。
Tue 20 Mar 2018 12:11:13 PM EDT: 7557
次に、別の端末から、を実行してkill -INT 7557
、7557
見た実際のプロセスIDに置き換えて、ping
統計を出力するようにコマンドを終了できます。
(シェルのジョブ制御機能を利用する場合、同じ端末内でこれを実現することもできます。ただし、その端末でコマンドを実行した余分な部分を削除せずに端末からテキストをコピーする場合は、ping
別の端末から終了する必要があります。)
参考文献: