Apakah ada cara untuk menyegarkan perintah yang kurang dinamis?

141

Saya suka watchperintahnya, tetapi ada keterbatasannya .

Saya ingin tahu apakah saya bisa meniru fungsi watchdengan less. Saya terutama mencari kemampuan untuk menelusuri direktori saya karena secara dinamis akan dimodifikasi melalui skrip yang sedang berjalan.

Zaid
sumber
Saya mencari tail -f foo.log | grep bar, dan untuk dapat secara dinamis mengubah perintah grep dengan memulai kembali pipa tail / grep.
Alexander Mills

Jawaban:

119

Di less, Anda dapat mengetik Funtuk terus membaca di akhir file (seperti tail -f); Anda dapat mengetik :edan nama file untuk melihat file yang berbeda, tetapi sayangnya, jika Anda memasukkan nama file saat ini, lesstidak memuat ulang file. Namun ada trik untuk membuatnya membaca kembali file saat ini, disarankan oleh sabgenton : ketik :edan masukkan nama file yang tidak ada ; yang menyebabkan kurang untuk menampilkan pesan kesalahan dan kemudian memuat kembali file saat ini.

Jika Anda mencari alternatif watch ls, berikut adalah beberapa:

  • Pengelola file modern (mis. Nautilus, Thunar, Konqueror, Dolphin, Finder) menyegarkan tampilan secara real time.
  • Emacs tidak memiliki penyegaran real-time, tetapi dengan auto-revert-mode, itu akan memuat ulang file atau direktori setiap 5 detik (penundaan dapat dikonfigurasi).
  • Meskipun w3m terutama adalah browser web, w3m membuat direktori yang bisa dilewati dan penampil file teks. Tekan Runtuk memuat ulang URL (lokal).
Gilles
sumber
6
Bagi saya: e randomnamejkdlfjldf gagal memuat nama file yang tidak ada kemudian memuat kembali ke file saat ini: D
sabgenton
1
@sabgenton Terima kasih, saya tidak tahu itu. Itu trik yang bagus. Saya menambahkannya ke jawaban saya, tetapi Anda dapat mempostingnya sebagai jawaban Anda sendiri (yang saya harap Zaid akan menerimanya).
Gilles
1
@CMCDragonkai Tidak, less +Fhanya menonton untuk konten yang ditambahkan. Gunakan :e nonexistentfileuntuk membaca kembali input yang sepenuhnya berubah.
Gilles
1
Apakah ada bendera baris perintah untuk itu?
CMCDragonkai
3
@ PaulWagland Tidak, Rtidak dapat me-refresh file dengan andal. Ini menyegarkan layar, dan menghapus beberapa buffer input, tetapi sebenarnya tidak memuat ulang data dari file dalam semua keadaan (hanya jika file tersebut besar? Saya tidak menggali lebih dalam ke dalam kode).
Gilles
65

Shift+Fakan membuat lessmirip dengan tailf. Artinya, ini akan disegarkan jika lebih banyak data ditambahkan ke file.

balki
sumber
7
Perhatikan bahwa ini hanya berfungsi untuk menambahkan. Jika garis dihapus atau diedit di tempat, lesstidak akan menunjukkan perubahan itu.
Nathaniel M. Beaver
Bagaimana cara saya berhenti mengikuti mode dan masuk kembali ke mode yang dapat digulir?
Tom Hale
1
<kbd> Ctrl + C </kbd>
balki
1
balki Pengalaman saya adalah bahwa ini membunuh perintah pemipaan data jika Anda menggunakan $COMMAND | less. Aku ingin tahu apakah ada cara yang bagus untuk ini? Anda dapat melakukan hal-hal seperti $COMMAND > /tmp/file & less /tmp/filetetapi itu tidak terlalu bagus.
Att Righ
@AttRigh Saya tidak pernah membunuh perintah saya (namun saya membaca log menjalankan perintah dengan cara ini, saya tidak menyalurkan ke kurang, secara teknis)
jena
41

Cukup ketik:

less +F filename

Ini mengemulasi penekanan "F" di dalam editor.

jhclark
sumber
1
Terima kasih; menambahkan alias alias check="less +F"ke blog saya .bashrc.
Luke Davis
22

manhalaman bisa sangat informatif. Jangan terintimidasi oleh mereka. Di antara yang lainnya, man lessAnda bisa menggunakan Rperintah untuk:

   R      Repaint the screen, discarding any buffered input.  Useful if the file is changing while it is being viewed.

(Saya menyadari pertanyaan ini sudah berusia lebih dari 6 tahun, tetapi muncul di pencarian google, jadi saya bukan satu-satunya yang mengklik tautan untuk sampai ke sini.)

destenson
sumber
7
Ini mengecat ulang layar seandainya terganggu oleh output dari program lain. Itu tidak secara konsisten memuat ulang file. Saya belum menggali secara mendalam ke dalam kode untuk melihat apa fungsinya, secara eksperimental file pendek tidak dimuat ulang. Saya benar-benar tidak terintimidasi oleh halaman manual dan saya katakan deskripsi ini adalah kata-kata yang buruk: "mengecat" tidak menyampaikan bahwa input dibaca kembali, dan perilaku aktual tidak cukup cocok "berguna jika file berubah" (mungkin itu adalah bug? Saya tidak tahu karena saya tidak tahu apa yang seharusnya dilakukan oleh perintah) ..
Gilles
Saya bukan ahli, dan belum membaca kode sumber juga, tetapi yang dilakukannya adalah melupakan apa yang sudah diketahui tentang file & memuatnya kembali, menyegarkan hasilnya berdasarkan input yang dimuat ulang. Pertanyaannya berbunyi, "Apakah ada cara untuk secara dinamis menyegarkan kurang perintah?" Jika saya telah membaca penjelasan pertanyaan lebih teliti sebelum menjawab, saya mungkin tidak akan menjawab, karena mereka kemudian mengatakan bahwa mereka ingin "menelusuri direktori saya karena secara dinamis akan dimodifikasi melalui skrip yang sedang berjalan." kurang tidak akan menjadi perintah yang tepat untuk itu.
destenson
Bekerja dengan baik untuk saya, bahkan ketika menggunakan file dengan panjang 3 byte. Saya tidak bisa membayangkan mengapa itu tidak bekerja untuk file yang lebih besar juga.
Addison
1
Bagus! Bagi saya ini berfungsi untuk file pendek dan panjang. Saya hanya melihat dua kemungkinan masalah: 1. lesstidak membuka kembali file menggunakan nama file - yaitu ketika inode file berubah (seperti dalam menimpa file menggunakan mv) maka konten file lama tetap (mungkin inode lama membaca ulang) - - 2. Baris yang ditampilkan pertama kali mungkin dimulai pada byte offset yang sama seperti pada konten file asli. Jadi ketika panjang garis berubah, garis yang ditampilkan pertama mungkin tidak lengkap dan garis yang ditampilkan bisa naik / turun.
pabouk
Rtidak selalu berhasil. Lihat unix.stackexchange.com/questions/4351/…
wisbucky
5

Kunci "F" saat menjalankan lessakan melakukan "tindak" yang sama tail -f, tapi saya tidak yakin apakah itu akan mencapai apa yang Anda cari di sini.

Dave Jennings
sumber
5

Saya biasanya mengetik Guntuk mengekor output berdasarkan satu kali. Saya merasa sangat membantu lebih dari sistem file jaringan seperti CIFS.

aneh
sumber
Ini lebih merupakan penyegaran atas permintaan file yang dibuka dengan lebih sedikit. Selain melompat ke akhir file, itu juga memuat file jika telah berubah.
jorb
1
Terima kasih. Pertama kali itu tidak menyegarkan bagi saya, tetapi sekarang tampaknya berfungsi dengan baik. Dalam manusia itu tidak ditulis bahwa itu menyegarkan file. man less: 'G atau> atau ESC-> Pergi ke baris N dalam file, default akhir file.' Saya menghapus komentar salah saya yang lama di sini, maaf untuk itu.
Yaroslav Nikitenko
1
BTW, apa yang Anda sebut 'dasar satu kali'? The pemelihara less, Mark Nudelman, menjawab sebagai berikut: "Perintah G biasanya tidak memaksa ulang membaca file seperti perintah R tidak Ini mungkin tampak melakukan itu jika akhir file belum dibaca ketika G. dipanggil, sehingga melompat ke ujung file harus membaca data di sana untuk pertama kalinya. Misalnya, jika Anda melompat ke ujung dengan G, lalu melompat kembali ke awal dengan 1G, maka program lain memodifikasi data di akhir file (tanpa mengubah panjangnya), "(lanjutan)
Yaroslav Nikitenko
(lanjutan) "maka Anda melompat ke ujung lagi dengan G, Anda tidak akan melihat data yang dimodifikasi. Tetapi jika Anda tidak melompat ke ujung dan kembali ke awal, maka pertama kali Anda menjalankan perintah G itu harus dibaca data di sana untuk pertama kalinya, dan tentu saja akan melihat modifikasi yang terjadi sejak kurang pertama kali dipanggil. "
Yaroslav Nikitenko
Dalam hal ini saya sebutkan itu menjadi satu-waktu menyegarkan sebagai lawan dari dinamis refresh, yang merupakan bagian dari apa pertanyaan awal adalah meminta.
jorb
1

Anda dapat menggunakan vim untuk membaca file kemudian menambahkan pemetaan berikut ke .vimrcfile Anda dan Anda dapat dengan mudah memuat file dengan ,r:

let mapleader = ","
nnoremap <leader>r :edit <CR>

Catatan jika Anda sudah mengedit file, vim akan mengeluh. Ubah saja ke

let mapleader = ","
nnoremap <leader>r :edit! <CR>

Untuk mengabaikan perubahan.

puk
sumber
Mereka harus mengorek vimdari tanganmu yang dingin dan mati. Konteks pertanyaannya adalah tentang less, tetapi sebagai seseorang dengan kecenderungan monomaniakal sendiri, saya bersimpati!
Benjamin R
1

Runtuk mengecat tidak selalu memuat ulang file. [1]

Solusi yang selalu memuat ulang file adalah dengan menekan hq, yang akan membuka halaman Bantuan, lalu keluar. Ini memiliki efek samping dari memaksa file untuk memuat ulang.


[1] Berikut adalah beberapa contoh situasi yang Rdapat dan tidak dimuat ulang:

  • >dan >>perubahan: DO reloaded
  • sed -i, gEdit, TextEdit: JANGAN dimuat ulang
  • Di Linux, viperubahan: DO reloaded
  • Di Mac, viperubahan: JANGAN dimuat ulang

Saya percaya perbedaannya turun ke apakah perubahan inode (Anda dapat memeriksa dengan ls -i foo.txt). Jika inode berubah, maka Rtidak akan berfungsi.

wisbucky
sumber
0

Anda bisa tail -fmengirimkannya ke pipa , itu akan menghasilkan Anda mengikuti output. Anda akan kehilangan kemampuan untuk bergerak (gulir) melalui output Anda sekalipun.

Gert
sumber
0

Jika Anda tidak menolak untuk menggunakan browser Anda bisa meluncurkan Algernon web server dengan perintah ini:

algernon -a -t /directory/name

Daftar file kemudian akan ditampilkan, dan di-refresh secara otomatis, di http: // localhost: 3000 /

Alexander
sumber
Utas yang salah? ..
Tomasz
Tampaknya ini adalah cara untuk menonton direktori, meskipun itu jauh dariless
Jeff Schaller
0

Saya baru saja menemukan utas ini seperti orang lain. Saya ingin menambahkan solusi ketika Anda sudah berada di akhir file, menggunakan 'g' diikuti oleh 'G' akan memaksa penyegaran file.

Saya akhirnya membuat tombol makro untuk ini dalam program terminal saya (SecureCRT). Makro hanyalah 'gG'.

ZMitchell
sumber