Anda juga dapat menggunakan gawk
(atau awk
, jika /etc/alternatives/awk
ingin /usr/bin/gawk
):
ping -c 4 www.google.fr | gawk '{print strftime("%c: ") $0}'
Ini mirip dengan pendekatan dalam jawaban Achu , tetapi ping
output disalurkan ke gawk
bukan loop shell yang memanggil date
. Seperti dengan pendekatan itu, ia bekerja tanpa -c
, tetapi jika Anda tidak lulus untuk membuat ping berhenti setelah n ping, dan Anda menghentikan loop dengan + , tidak akan mencetak statistik biasa.-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
Ini terjadi apakah ping
output disalurkan ke gawk
atau shell while
loop. Alasannya adalah bahwa perintah di sisi kanan pipa, bukannya ping
, menerima SIGINT ketika Ctrl+C ditekan, dan ping
tidak tahu untuk mencetak statistik sebelum diakhiri.
Jika Anda telah menjalankan ping
tanpa -c
di sisi kiri pipa (seperti yang ditunjukkan di atas) dan Anda ingin menghentikannya sedemikian rupa sehingga masih mencetak statistik, maka alih-alih menekan Ctrl+ Cdi terminal tempat ia berjalan, Anda bisa menjalankan dari terminal lain, ganti dengan ID proses dari perintah. Jika Anda hanya menjalankan satu instance darikill -INT PID
PID
ping
ping
maka Anda bisa menggunakannya killall -INT ping
.
Atau, Anda bisa mengganti ping
perintah di sisi kiri pipa dengan perintah yang menjalankan shell, melaporkan ID proses shell itu, dan kemudian mengganti shell itu dengan ping
perintah (menyebabkannya memiliki PID yang sama):
sh -c 'echo $$; exec ping www.google.fr' | gawk '{print strftime("%c: ") $0}'
Kemudian baris pertama output, akan menampilkan ID proses dari ping
perintah (yang biasanya akan berbeda setiap kali). Akan terlihat seperti ini, tetapi dengan waktu dan tanggal yang berbeda dan mungkin ID proses yang berbeda:
Tue 20 Mar 2018 12:11:13 PM EDT: 7557
Kemudian, dari terminal lain, Anda dapat menjalankan kill -INT 7557
, mengganti7557
dengan ID proses yang sebenarnya Anda lihat, untuk mengakhiri ping
perintah sedemikian rupa sehingga menyebabkannya untuk mencetak statistik.
(Jika Anda mengambil keuntungan dari kontrol pekerjaan shell Anda fitur , maka Anda dapat mencapai ini dalam terminal yang sama juga. Tetapi jika Anda ingin menyalin teks dari terminal Anda tanpa harus menghapus bagian asing di mana Anda menjalankan perintah di terminal itu, maka Anda harus berhenti ping
dari terminal terpisah.)
Bacaan lebih lanjut: