Ikuti pipa menggunakan lebih sedikit?

25

Bisakah kurang mengikuti (dengan menekan F) input yang di-pip (mirip dengan file)? Untuk file yang sedang ditulis, perintah

less <file>

akan mengikuti file saat menekan F.

Tetapi jika saya memiliki perintah yang menyalurkan output langsung ke kurang, seperti ini

command | less

menekan F tidak akan melakukan apa pun.

Jadi sepertinya pipa tidak bisa diikuti seperti file? Atau mungkin itu ada hubungannya dengan perintah juga menulis ke STDERR? Efek yang saya coba capai adalah selalu melihat keluaran terbaru dari perintah: sama seperti menjaga PageDown ditekan!

Sebuah komentar terkait berlaku untuk G (lanjut ke akhir): ketika memipis langsung ke kurang, itu tidak akan berhasil.

haelix
sumber

Jawaban:

21

Menekan Fatau Gmerek lessmencoba untuk mencapai masukan EOF. Jika input adalah pipa, lesshang sampai pipa ditutup di sisi lain (dan bukan "tidak melakukan apa-apa").

Ini dapat dikerjakan dengan menyimpan output perintah ke file sementara di latar belakang, dan kemudian dengan menggunakannya sebagai input untuk less:

command > /tmp/x &
less +F /tmp/x; kill %; rm /tmp/x

Tidak ada opsi untuk melakukan ini lesshanya; Namun, saya akui itu akan berguna.

mik
sumber
Jika inputnya adalah pipa, lesshang sampai pipa ditutup di sisi lain . Itu semacam pernyataan yang menyesatkan. Yang terjadi adalah bahwa lebih sedikit panggilan readdalam mode pemblokiran, menunggu data baru atau atau penutupan pipa.
Piotr Dobrogost
3
Setelah menekan F atau G pada input pipa lesstidak hanya pemblokiran membaca, tetapi apakah itu dalam lingkaran menunggu EOF. Dan EOF pada pipa hanya terjadi jika sisi lainnya ditutup.
mik
3
Jika lessakan memperbarui layar dalam loop itu, tidak akan ada masalah. Memblokir baca tidak ada hubungannya dengan masalah ini.
mik
1
@ Aliran ini bukan menggantung pertanyaan tentang, tetapi hanya menunggu yang diharapkan dalam situasi ini - menunggu lebih banyak data dalam file ketika EOF tercapai (yang tidak akan terjadi untuk pipa tertutup, omong-omong), atau untuk interupsi untuk keluar dari mode ikuti
mik
1
@PiotrDobrogost dengan pemblokiran baca lesstidak akan dapat memperbarui layar, jika tidak ada data; ketika beberapa data muncul, pemblokiran baca akan mengembalikannya, dan lessakan dapat memperbarui layar tanpa utas terpisah
mik
6

Bisakah kurang mengikuti (dengan menekan F) input yang di-pip (mirip dengan file)?

Ya, dimulai dengan versi 474. Namun tidak disebutkan dalam catatan rilis versi apa pun karena masih ada satu masalah dengan fitur ini saat ini. Di bawah ini adalah komentar dari pengelola kurang - Mark Nudelman:

Mengenai perintah F pada pipa, ini juga diperbaiki di kurang-474. Alih-alih mencari ke EOF, perintah F mencari ke akhir input buffered dan mulai membaca di sana. Namun itu tidak benar-benar dapat digunakan karena ketika Anda menekan CTRL-C untuk menghentikan perintah F, itu membunuh proses menghasilkan output. Saya tidak yakin bagaimana cara memperbaikinya.

Sampai masalah ini diperbaiki dalam waktu yang kurang dapat diselesaikan dengan menggunakan fitur shell. Lihat jawaban saya untuk Apakah ada cara untuk keluar dari mode ikut “kurang” tanpa menghentikan proses lain dalam pipa? pertanyaan untuk detail.

Sebagai referensi, masalah dengan F yang tidak bekerja dengan pipa memiliki nomor referensi 300 pada daftar bug yang dikenal dan berjudul Perintah F tidak bekerja pada input yang disalurkan.


Sebuah komentar terkait berlaku untuk G (lanjut ke akhir): ketika memipis langsung ke kurang, itu tidak akan berhasil.

Ini bekerja mulai dari versi 466. Mengutip dari catatan rilis untuk versi ini:

Perintah baru ESC-G pergi ke akhir data yang saat ini disangga dalam pipa

Piotr Dobrogost
sumber
Perintah ESC-G diperkenalkan dalam versi 466, dirilis pada 23 Agustus 2014.
mik
@mik Sepertinya ada kesalahan dalam catatan rilis untuk versi 471 lalu. Terima kasih sudah diperbaiki.
Piotr Dobrogost
Bukan kesalahan, mereka hanya daftar perubahan secara bertahap sejak rilis stabil, versi 458 dalam kasus ini. Namun, tidak ada rilis stabil dengan perintah ESC-G.
mik
Perintah ESC-G sekarang dalam rilis stabil (481): "16 Okt 2015 less-481 telah dirilis untuk penggunaan umum".
mik
Pembaruan: Mengenai perintah F pada pipa, ini juga diperbaiki di kurang-474. Alih-alih mencari ke EOF, perintah F mencari akhir input buffered dan mulai membaca di sana. Namun itu tidak benar-benar dapat digunakan karena ketika Anda menekan ctrl-C untuk menghentikan perintah F, itu membunuh proses menghasilkan output. Saya tidak yakin bagaimana cara memperbaikinya. - Mark Nudelman, pemelihara yang kurang
Piotr Dobrogost
2

Dari halaman manual kurang

[Keyboard] COMMANDS [...]

   F      Scroll  forward, and keep trying to read when the end of file is reached.  Normally this command would be used when already
          at the end of the file.  It is a way to monitor the tail of a file which is growing while it is being viewed.  (The  behav‐
          ior is similar to the "tail -f" command.)

jadi ini seharusnya bekerja, dan itu benar-benar bekerja untuk saya.

artisoex
sumber
1
Perintah ini berperilaku berbeda ketika digunakan dengan pipa seperti yang dijelaskan oleh @mik dan jelas bukan yang dicari OP.
Piotr Dobrogost