คุณยังสามารถใช้gawk
(หรือawk
หาก/etc/alternatives/awk
คะแนนของคุณเป็น/usr/bin/gawk
):
ping -c 4 www.google.fr | gawk '{print strftime("%c: ") $0}'
นี้จะคล้ายกับวิธีการในคำตอบ Achu ของแต่ping
ของเอาท์พุทประปาแทนที่จะเป็นห่วงเชลล์ที่โทรgawk
date
เช่นเดียวกับวิธีการที่จะทำงานได้โดยไม่ต้อง-c
แต่ถ้าคุณไม่ผ่านจะทำให้หยุด ping หลังจากnปิงและคุณหยุดห่วงกับ+ , จะไม่พิมพ์สถิติปกติ-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ในเทอร์มินัลที่มันทำงานอยู่จากเทอร์มินัลอื่นแทนที่ด้วย ID กระบวนการของคำสั่ง หากคุณใช้เพียงหนึ่งอินสแตนซ์คุณก็สามารถใช้งานได้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}'
จากนั้นบรรทัดแรกของเอาต์พุตจะแสดง ID กระบวนการของping
คำสั่ง (ซึ่งโดยทั่วไปจะแตกต่างกันในแต่ละครั้ง) มันจะมีลักษณะเช่นนี้ แต่ด้วยเวลาและวันที่ที่แตกต่างกันและอาจเป็น ID กระบวนการที่แตกต่างกัน:
Tue 20 Mar 2018 12:11:13 PM EDT: 7557
จากเทอร์มินัลอื่นคุณสามารถเรียกใช้kill -INT 7557
แทนที่7557
ด้วย ID กระบวนการจริงที่คุณเห็นเพื่อยกเลิกping
คำสั่งในลักษณะที่จะทำให้มันพิมพ์สถิติ
(ถ้าคุณใช้ประโยชน์จากคุณสมบัติการควบคุมงานของเชลล์คุณสามารถทำสิ่งนี้ได้ในเทอร์มินัลเดียวกันเช่นกัน แต่ถ้าคุณต้องการคัดลอกข้อความจากเทอร์มินัลของคุณโดยไม่ต้องลบส่วน extranous ใด ๆ คุณควรยกเลิกping
จากเทอร์มินัลแยกต่างหาก)
อ่านเพิ่มเติม: