Вы также можете использовать gawk
(или awk
, если ваш /etc/alternatives/awk
указывает на /usr/bin/gawk
):
ping -c 4 www.google.fr | gawk '{print strftime("%c: ") $0}'
Это аналогично подходу в Ответ Ачу, но ping
выходной сигнал передается по каналу на gawk
вместо цикла оболочки, который вызывает date
. Как и в случае с этим подходом, он работает без -c
, но если ты не пройдешь -c n
чтобы пинг прекратился после n пингует, и вы останавливаете цикл с помощью Ctrl+C, ping
не будет печатать обычную статистику.
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 msTue 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 msTue 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 msTue 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 msTue 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 3003msTue 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 msTue 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 msTue 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 msTue 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 msTue 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
, получает СИГИНТ когда Ctrl+C нажимается, и ping
не знает, нужно ли печатать статистику перед завершением работы.
Если вы бежали ping
без -c
на левой стороне канала (как показано выше), и вы хотите завершить его таким образом, чтобы он по-прежнему печатал статистику, а затем вместо нажатия Ctrl+C в терминале, где он запущен, вы могли бы запустить kill -INT pid
с другого терминала, заменив PID
с идентификатором процесса ping
команда. Если вы используете только один экземпляр ping
тогда вы могли бы просто использовать killall -INT ping
.
В качестве альтернативы вы могли бы заменить ping
команда на левой стороне трубы с помощью команды который запускает оболочку, сообщает идентификатор процесса этой оболочки, а затем заменяет эту оболочку на ping
команда (в результате чего у нее будет тот же PID):
sh -c 'echo $$; exec ping www.google.fr' | gawk '{print strftime("%c: ") $0}'
Затем в первой строке вывода будет показан идентификатор процесса ping
команда (которая, как правило, каждый раз будет отличаться). Это выглядело бы так, но с другим временем и датой и, возможно, с другим идентификатором процесса:
Tue 20 Mar 2018 12:11:13 PM EDT: 7557
Затем, с другого терминала, вы можете запустить kill -INT 7557
, заменяющий 7557
с фактическим идентификатором процесса, который вы видели, чтобы завершить ping
команду таким образом, чтобы заставить ее печатать статистику.
(Если вы воспользуетесь преимуществами своей оболочки контроль работы функции, то вы можете достичь этого и в том же терминале. Но если вы хотите скопировать текст из своего терминала без необходимости удалять какую-либо постороннюю часть, где вы выполняли команды в этом терминале, тогда вам следует завершить работу ping
с отдельного терминала.)
Дальнейшее чтение: