meno con "aggiorna file" come funzionalità


9

Voglio guardare un file che viene sovrascritto ogni 5 minuti con less. Come posso fare lessseguire il nuovo descrittore di file invece di mantenere quello vecchio visualizzato? watch "cat file"non lo farà perché il file è troppo lungo per adattarsi a una finestra del terminale.


2
"Segui" implica seguire la fine del file. Potresti voler chiarire che il tuo file viene sovrascritto e sei interessato a riaprirlo.
Chutz,

Intendevo seguire il descrittore di file, come è definito nella tail -fpagina man di. Tuttavia, ho chiarito la mia domanda.
d135-1r43,

Usa less --follow-namevedi unix.stackexchange.com/a/74287/112522
djsutho,

Risposte:


10

È possibile ottenere questo effetto immettendo il Fcomando ( Shift+F) durante la visualizzazione del file in less. Per smettere di seguire e tornare al paging, premereCtrl+C

Poiché il file cambia solo ogni 5 minuti, è anche possibile utilizzare tail -fe specificare un tempo di sospensione più lungo con -s(impostazione predefinita a 1 secondo). Per esempio,

tail -f -s 60 myfile

controlla l' myfileoutput ogni 60 secondi.

EDIT: a causa della domanda fuorviante, la risposta di cui sopra è stata insoddisfacente. Segue il secondo tentativo:

Per riaprire lo stesso file lessogni 5 minuti, prova questo:

while true; do ( sh -c 'sleep 600 && kill $PPID' & less myfile ); done

Questo genererà una subshell che mette in background un altro processo shell incaricato di terminare il suo processo padre dopo 5 minuti. Quindi apre il file con less. Quando il comando shell in background uccide la subshell padre, uccide tutti i suoi figli, incluso il comando "less". Quindi il ciclo riavvia nuovamente il processo.

L'unico modo semplice che conosco per uccidere questo è uccidere il terminale in cui si trova la tua shell originale. Se questo è inaccettabile, puoi usare il trucco "killfile":

touch killfile
while [ -f killfile]; do stuff; done

Per smettere di farlo stuff, rmil killfile in un'altra shell.


Questo è solo parzialmente utile per il mio caso. Il file guardato è molto grande le informazioni aggiornate in alto. Non è un file di registro "scorrevole". Maiusc + F scorre immediatamente fino alla fine del file ...
d135-1r43

È necessario modificare la domanda per chiarire. Ho modificato la mia risposta anche per rispondere.
bonsaiviking

watch -n 1 less <filename>
axel22,

1

Puoi fare qualcosa di simile in vim.

Avvia una sessione del server di vim:

vim -R --servername refresh_session

Quindi, in un'altra console, monitorare il file per gli aggiornamenti e dire alla sessione di vim di ricaricare il file non appena viene aggiornato:

inotifywait -e close_write -m your_log_file | while read filename events; do
    vim --servername refresh_session --remote $filename
done

Alcuni gotchas.

  • Questo ovviamente non funzionerà se vimnon si è compilato con la clientserverfunzione in.
  • inoifywaitsmetterà di funzionare quando il file viene eliminato. Quindi spero che il tuo file venga sovrascritto. Naturalmente è possibile aggirare anche questo.

E se vuoi avere un'esperienza più lesssimile, puoi usare le lessmacro per ottenere lessi collegamenti chiave vim.

/usr/share/vim/vim73/macros/less.sh --servername refresh_session

0

Ho trovato un vecchio, ma molto buono programma "meno" (un "cercapersone"). Ha un comando "R" che aggiorna il file.

Si chiama "lv" , puoi installarlo su Ubuntu usando:

sudo apt install lv

Tuttavia, sembra non avere la funzione di caricamento automatico.



-1

La coda è tua amica. "tail -f nomefile" ti mostrerà nuove righe quando compaiono.

O se stai cercando le modifiche apportate nel mezzo del file, potresti eseguire uno script ogni pochi minuti per fare una copia del file in una posizione temporanea e fare una differenza su di esso?


Era abbastanza chiaro anche nel post originale che esisteva un "nuovo file". Pertanto il descrittore di file sarebbe cambiato ma tail -favrebbe comunque letto quello vecchio.
Alastair Irvine,

Non penso sia giusto. Per essere cristallini, dobbiamo guardare il post originale, non modificato, perché se guardi la data della mia risposta, questa è la domanda a cui stavo rispondendo. In quella domanda inedita, la mia risposta ha perfettamente senso. serverfault.com/posts/445899/revisions
David W

Ho controllato le revisioni. Parole chiave "nuovo file".
Alastair Irvine,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.