Daha az komutu dinamik olarak yenilemenin bir yolu var mı?


141

watchKomutu beğendim , ancak sınırlamaları var .

Ben işlevselliğini taklit olup olamayacağını merak ediyorum watchile less. Esas olarak, çalışan bir komut dosyası aracılığıyla dinamik olarak değiştirildiği için dizinimde gezinme yeteneğini arıyorum.


Arıyorum tail -f foo.log | grep barve grep komutunu kuyruk / grep boru hattını yeniden başlatarak dinamik olarak değiştirebilmek için.
Alexander Mills,

Yanıtlar:


119

Olarak less, yazabilirsiniz Fbir dosyaya (gibi sonunda okumaya devam etmek tail -f); :efarklı bir dosyayı görüntülemek için yazabilir ve bir dosya adı yazabilirsiniz , ancak ne yazık ki, geçerli dosyanın adını girerseniz less, dosyayı yeniden yüklemez. Bununla birlikte, sabgenton tarafından önerilen mevcut dosyayı tekrar okumasını sağlayan bir hile vardır : varolmayan dosyanın adını yazın :eve girin ; Bu, bir hata mesajı görüntülemek için daha az neden olur ve geçerli dosyayı yeniden yükleyin.

Alternatif bir şey arıyorsanız watch ls, işte birkaç tane:

  • Modern dosya yöneticileri (örneğin Nautilus, Thunar, Konqueror, Dolphin, Finder) gerçek zamanlı olarak görüntüleri yeniler.
  • Emacs gerçek zamanlı yenilemeye sahip değildir, ancak auto-revert-modedosya veya dizini her 5 saniyede bir yeniden yükler (gecikme yapılandırılabilir).
  • Her ne kadar w3m öncelikle bir web tarayıcısı olsa da, değişken bir dizin ve metin dosyası görüntüleyicisi yapar. R(Yerel) URL’yi yeniden yüklemek için basın .

6
Benim için: e randomnamejkdlfjldf var olmayan dosya adını yükleyemiyor ve ardından geçerli dosyaya geri
yüklüyor

1
@sabgenton Teşekkürler, bunu bilmiyordum. Bu harika bir numara. Cevabımı ekledim, ancak kendi cevabınızı (Zaid'in kabul edeceğini umuyorum) kendi cevabınız olarak gönderebilirsiniz.
Gilles

1
@ CMCDragonkai Hayır, less +Fyalnızca eklenen içerikleri izler. :e nonexistentfileTamamen değiştirilmiş girişi tekrar okumak için kullanın .
Gilles

1
Bunun için bir komut satırı bayrağı var mı?
CMCDragonkai

3
@PaulWagland Hayır, Rdosyayı güvenilir bir şekilde yenilemez. Ekranı yeniler ve bazı giriş arabelleklerini siler, ancak her koşulda dosyadaki verileri aslında yeniden yüklemez (yalnızca dosya büyükse? Kodun derinliklerine kazmadım).
Gilles

65

Shift+Fyapacak lessbenzer tailf. Yani, dosyaya daha fazla veri eklenirse yenilenir.


7
Bunun sadece ekler için işe yaradığını unutmayın . Satır yerinde kaldırılır veya düzenlenirse, lessbu değişiklikleri göstermez.
Nathaniel M. Beaver

Takip modunu nasıl durdurabilirim ve kaydırılabilir moda tekrar girebilirim?
Tom Hale

1
<kbd> Ctrl + C </kbd>
balki

1
balki Benim deneyimim, eğer kullanıyorsanız bu verileri borulama komutunu öldürür $COMMAND | less. Acaba bunun etrafında güzel bir yol var mı? Böyle şeyler yapabilirsin $COMMAND > /tmp/file & less /tmp/fileama bu hiç hoş değil.
Att Righ,

@AttRigh Komutumu hiç öldürmedim (ancak bu şekilde çalışan komutların günlüklerini okudum, teknik olarak daha az boruya
dalmıyorum

41

Basitçe yazın:

less +F filename

Bu, editör içinde "F" ye basmak öykünür.


1
Teşekkürler; takma alias check="less +F"adıma ekle .bashrc.
Luke Davis

22

mansayfalar çok bilgilendirici olabilir. Onlardan korkma. Her şey arasında man less, Rkomutu şu amaçla kullanabileceğinizi söylüyor :

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

(Bu sorunun 6 yıldan daha eski olduğunu biliyorum, ancak google aramalarda ortaya çıkıyor, bu yüzden buraya ulaşmak için bağlantıyı tıklayan tek kişi ben değilim.)


7
Bu, başka bir programın çıktısı tarafından kesilmesi durumunda ekranı yeniden boyar. Dosyayı sürekli olarak yeniden yüklemiyor. Ne yaptığını görmek için kodun derinliklerine bakmadım, deneysel olarak kısa dosyalar yeniden yüklenmiyor. Man sayfalarından kesinlikle korkmuyorum ve bu açıklamanın kötü ifade edildiğini söylüyorum: “yeniden boyamak”, bu girişin yeniden okunmadığını ve asıl davranışın “dosya değişiyorsa yararlı” olduğunu tam olarak karşılamıyor (belki de bir böcek? Bilmiyorum komutun ne yapması gerektiğini bilmiyorum çünkü) ..
Gilles

Uzman değilim ve daha azının kaynak kodunu da okumamıştım, ancak yaptığı şey dosya hakkında zaten ne bildiğini ve yeniden yüklediğini, yeniden yüklediği girdiyi temel alarak çıktısını yenilediğini unutmak. "Dinamik olarak daha az komutu yenilemenin bir yolu var mı?" Cevaplamadan önce sorunun açıklamasını daha iyi okuduysam, cevap vermeyebilirdim, çünkü "dizinde gezinmek için dinamik olarak çalışan bir komut dosyasıyla değiştirilirken gezinmek" istediklerini söylemeye devam ediyorlardı. daha az bunun için doğru komut olmazdı.
destenson,

3 byte uzun dosyaları kullanırken bile benim için iyi çalışıyor. Neden daha büyük dosyalar için de işe yaramayacağını hayal edemiyorum.
Addison

1
Harika! Benim için hem kısa hem de uzun dosyalar için çalışıyor. Sadece iki olası sorun farkettim: 1. lessDosyayı dosya adını kullanarak yeniden açmadım - yani dosyanın inode'u değiştiğinde (kullanarak dosyanın üzerine yazarken mv) sonra eski dosya içeriği kaldı (muhtemelen eski inode yeniden okunurdu) - - 2. Görüntülenen ilk satır, büyük olasılıkla, orijinal dosya içeriğindeki ile aynı byte ofsetiyle başlar. Böylece çizgi uzunlukları değiştiğinde, görüntülenen ilk satır eksik olabilir ve görüntülenen satırlar yukarı / aşağı hareket edebilir.
pabouk

Rher zaman çalışmıyor Bkz unix.stackexchange.com/questions/4351/...
wisbucky

5

Çalıştırırken "F" tuşu lessbenzer bir "takip" yapar tail -f, ancak bunun burada aradığınızı başaracağından emin değilim.


5

Normalde Gçıktıyı bir kereye mahsus olmak için yazarım. Özellikle CIFS gibi bir ağ dosya sistemi üzerinden faydalı buluyorum.


Bu daha azıyla açılan dosyanın isteğe bağlı olarak yenilenmesidir. Dosyanın sonuna atlamanın yanı sıra, değiştirilmişse dosyayı yeniden yükler.
jorb

1
Teşekkürler. İlk defa benim için yenilenmedi, ama şimdi düzgün çalışıyor gibi görünüyor. Adamda dosyayı yenilediği yazılı değil. man less: 'G veya> veya ESC-> Dosyadaki N satırına gidin, varsayılan olarak dosyanın sonu.' Eski yanlış yorumlarımı sildim, onlar için üzgünüm.
Yaroslav Nikitenko

1
BTW, 'bir kerelik temeli' ne diyorsunuz? Devam ettiren lessMark Nudelman aşağıdaki cevap verdi: "G komutu normal zorlamaz yeniden okumak Bu görünebilir gelmez R komutu gibi dosyanın yapmak dosyanın sonuna henüz okunan edilmemiş ise zaman G söyledi. Dosyanın sonuna atlamak ilk kez oradaki verileri okumak zorundadır, örneğin G ile sonuna atlarsanız, sonra 1G ile başa atlarsanız, başka bir program veriyi değiştirir. Dosyanın sonu (uzunluğu değiştirmeden), "(devam)
Yaroslav Nikitenko

(cont) "o zaman G ile tekrar sonuna atlarsanız, değiştirilen verileri görmezsiniz. orada ilk kez veri var ve elbette daha az ilk çağrıldığından bu yana yapılan değişiklikleri görecek. "
Yaroslav Nikitenko

Bu durumda , asıl sorunun sorduğu şeyin bir parçası olan dinamik bir yenilemenin aksine tek seferlik bir yenileme olduğunu söyledim .
jorb

1

Dosyayı okumak için vim'i kullanabilir, ardından dosyaya aşağıdaki eşlemeyi ekleyebilir ve .vimrcbir dosyayı kolayca yeniden yükleyebilirsiniz ,r:

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

Dosyayı daha önce düzenlediyseniz, vim'in şikayet edeceğini unutmayın. Sadece değiştir

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

Değişiklikleri yoksaymak için.


vimSoğuk, ölü ellerinizden gözetlemek zorunda kalacaklar . Sorunun bağlamı ilgili less, ancak monomanyak eğilimleri olan biri olarak ben de sempati duyuyorum!
Benjamin R,

1

Rrepaint için her zaman dosyayı yeniden yüklemez. [1]

Her zaman dosyayı yeniden yükleyen bir geçici çözüm hq, Yardım sayfasını açan ve sonra çıkacak olan tuşa basmaktır. Dosyayı yeniden yüklemeye zorlamanın bir yan etkisi vardır.


[1] İşte, Ryeniden yüklenen ve yeniden yüklenmeyen bazı durum örnekleri :

  • >ve >>değişiklikler: yeniden yüklenir
  • sed -i, gEdit, TextEdit: Yeniden yüklenme
  • Linux'ta, videğişiklikler: DO yeniden yüklenir
  • Mac'te videğişiklikler: Yeniden yüklenme

Farkın inode'un değişip değişmediğine inanıyorum (kontrol edebilirsiniz ls -i foo.txt). Eğer inode değişirse, o Rzaman çalışmaz.


0

Bunun yerine boru olabilir tail -f, çıktıyı izlemenize neden olur. Yine de çıktılarınız arasında hareket etme (kaydırma) özelliğini kaybediyor olacaksınız.



0

Bu konuyu başkaları gibi buldum. Dosyanın sonunda ne zaman olduğunuzun çözümünü eklemek isterim, 'g' ve ardından 'G' kullanmak dosyanın yenilenmesini zorlar.

Terminal programımda (SecureCRT) bunun için bir makro düğmesi yaptım. Makro basitçe 'gG'.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.