Bạn cũng có thể sử dụng gawk
(hoặc awk
, nếu /etc/alternatives/awk
điểm của bạn /usr/bin/gawk
):
ping -c 4 www.google.fr | gawk '{print strftime("%c: ") $0}'
Điều này tương tự như cách tiếp cận trong câu trả lời của Achu , nhưng ping
đầu ra của nó được dẫn đến gawk
thay vì một vòng lặp shell gọi date
. Như với cách tiếp cận đó, nó hoạt động mà không có -c
, nhưng nếu bạn không vượt qua để làm cho ping dừng lại sau n ping và bạn dừng vòng lặp với + , sẽ không in các số liệu thống kê thông thường.-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
Điều này xảy ra cho dù ping
đầu ra của đường ống được dẫn đến gawk
hoặc một while
vòng lặp shell . Lý do là lệnh đó ở phía bên phải của đường ống, thay vì ping
nhận SIGINT khi nhấn Ctrl+ Cvà ping
không biết in các số liệu thống kê trước khi bị chấm dứt.
Nếu bạn đã chạy ping
mà không -c
ở bên trái của một đường ống (như được hiển thị ở trên) và bạn muốn chấm dứt nó theo cách mà nó vẫn in các số liệu thống kê, thì thay vì nhấn Ctrl+ Ctrong thiết bị đầu cuối nơi nó đang chạy, bạn có thể chạy từ một thiết bị đầu cuối khác, thay thế bằng ID tiến trình của lệnh. Nếu bạn chỉ chạy một phiên bản thì bạn có thể sử dụng .kill -INT PID
PID
ping
ping
killall -INT ping
Ngoài ra, bạn có thể thay thế ping
lệnh ở phía bên trái của đường ống bằng lệnh chạy shell, báo cáo ID tiến trình của shell đó và sau đó thay thế shell đó bằng ping
lệnh (khiến nó có cùng một PID):
sh -c 'echo $$; exec ping www.google.fr' | gawk '{print strftime("%c: ") $0}'
Sau đó, dòng đầu ra đầu tiên, sẽ hiển thị ID tiến trình của ping
lệnh (thường sẽ khác nhau mỗi lần). Nó sẽ trông như thế này, nhưng với thời gian và ngày khác nhau và có thể là ID quá trình khác nhau:
Tue 20 Mar 2018 12:11:13 PM EDT: 7557
Sau đó, từ một thiết bị đầu cuối khác, bạn có thể chạy kill -INT 7557
, thay thế 7557
bằng ID tiến trình thực tế mà bạn đã thấy, để chấm dứt ping
lệnh theo cách khiến nó phải in số liệu thống kê.
(Nếu bạn tận dụng các tính năng kiểm soát công việc của shell , thì bạn cũng có thể đạt được điều này trong cùng một thiết bị đầu cuối. Nhưng nếu bạn muốn sao chép văn bản từ thiết bị đầu cuối của mình mà không phải xóa bất kỳ phần ngoại lai nào khi bạn chạy các lệnh trong thiết bị đầu cuối đó, thì bạn sẽ chạy các lệnh trong thiết bị đầu cuối đó, sau đó bạn nên chấm dứt ping
từ một thiết bị đầu cuối riêng biệt.)
Đọc thêm: