Ви також можете використовувати gawk
(або awk
, якщо ваші /etc/alternatives/awk
пункти /usr/bin/gawk
):
ping -c 4 www.google.fr | gawk '{print strftime("%c: ") $0}'
Це схоже на підхід у відповіді Ачу , але ping
вихідний сигнал передається на gawk
замість петлі оболонки, яка викликає date
. Як і у випадку з цим підходом, він працює без -c
, але якщо ви не перейдете до зупинки ping після n pings, і ви зупините цикл з + , не буде друкувати звичайну статистику.-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
, отримує SIGINT, коли натискається 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
з окремого терміналу.)
Подальше читання: