C'è un modo per aggiornare dinamicamente il comando less?


141

Mi piace il watchcomando, ma ha i suoi limiti .

Sono curioso di sapere se potrei imitare la funzionalità di watchwith less. Sto principalmente cercando la possibilità di scorrere la mia directory mentre viene modificata dinamicamente tramite uno script in esecuzione.


Sto cercando tail -f foo.log | grep bare per poter cambiare dinamicamente il comando grep con il riavvio della pipeline tail / grep.
Alexander Mills,

Risposte:


119

In less, puoi digitare Fper continuare a leggere alla fine di un file (come tail -f); puoi digitare :ee un nome file per visualizzare un file diverso, ma sfortunatamente, se inserisci il nome del file corrente, lessnon ricaricare il file. Comunque c'è un trucco per farlo rileggere il file corrente, suggerito da sabgenton : digitare :ee inserire il nome di un file inesistente ; che fa sì che less visualizzi un messaggio di errore e quindi ricarichi il file corrente.

Se stai cercando un'alternativa a watch ls, eccone alcuni:

  • I moderni file manager (ad es. Nautilus, Thunar, Konqueror, Dolphin, Finder) aggiornano le viste in tempo reale.
  • Emacs non ha un aggiornamento in tempo reale, ma con auto-revert-mode, ricaricherà il file o la directory ogni 5 secondi (il ritardo è configurabile).
  • Sebbene w3m sia principalmente un browser Web, crea una directory passabile e un visualizzatore di file di testo. Premere Rper ricaricare l'URL (locale).

6
Per me: e randomnamejkdlfjldf non riesce a caricare il nome file inesistente, quindi ricarica il file corrente: D
sabgenton

1
@sabgenton Grazie, non lo sapevo. È un grande trucco. L'ho aggiunto alla mia risposta, ma potresti pubblicarlo come una tua risposta (che spero che Zaid accetterebbe).
Gilles,

1
@CMCDragonkai No, controlla less +Fsolo i contenuti aggiunti. Utilizzare :e nonexistentfileper rileggere l'input completamente modificato.
Gilles,

1
C'è un flag della riga di comando per quello?
CMCDragonkai,

3
@PaulWagland No, Rnon aggiorna in modo affidabile il file. Aggiorna lo schermo e cancella alcuni buffer di input, ma in realtà non ricarica i dati dal file in tutte le circostanze (solo se il file è di grandi dimensioni? Non ho approfondito il codice).
Gilles,

65

Shift+Frenderà lesssimile a tailf. Cioè, viene aggiornato se vengono aggiunti più dati al file.


7
Si noti che questo funziona solo per gli allegati. Se le righe vengono rimosse o modificate sul posto, lessnon verranno visualizzate tali modifiche.
Nathaniel M. Beaver,

Come posso smettere di seguire la modalità e accedere nuovamente alla modalità scorrevole?
Tom Hale,

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

1
balki La mia esperienza è che questo uccide il comando eseguendo il piping dei dati se si sta utilizzando $COMMAND | less. Mi chiedo se c'è un bel modo per aggirare questo? Puoi fare cose del genere $COMMAND > /tmp/file & less /tmp/filema non è molto carino.
Att Righ,

@AttRigh Non ho mai ucciso il mio comando (comunque leggo i registri dei comandi in esecuzione in questo modo, tecnicamente non faccio pipa in meno)
jena

41

Digita semplicemente:

less +F filename

Questo emula premendo "F" all'interno dell'editor.


1
Grazie; aggiunto l'alias alias check="less +F"al mio .bashrc.
Luke Davis,

22

manle pagine possono essere molto istruttive. Non lasciarti intimidire da loro. Tra le altre cose, man lessdice che puoi usare il Rcomando per:

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

(Mi rendo conto che questa domanda ha più di 6 anni, ma emerge dalle ricerche su Google, quindi non sono l'unico che ha fatto clic sul link per arrivare qui.)


7
Ciò ridisegna lo schermo nel caso in cui fosse interrotto dall'output di un altro programma. Non ricarica costantemente il file. Non ho scavato a fondo nel codice per vedere cosa fa, i file brevi sperimentalmente non vengono ricaricati. Non sono assolutamente intimidito dalle pagine man e dico che questa descrizione è scarsamente formulata: "ridipingere" non trasmette che l'input viene riletto e il comportamento effettivo non si adatta "utile se il file sta cambiando" (forse è un bug? Non lo so poiché non so che cosa dovrebbe fare il comando) ..
Gilles

Non sono un esperto e non ho nemmeno letto il codice sorgente di less, ma ciò che fa è dimenticare ciò che già conosce sul file e ricaricarlo, aggiornando il suo output in base all'input che ricarica. La domanda dice "Esiste un modo per aggiornare dinamicamente il comando less?" Se avessi letto la spiegazione della domanda in modo più approfondito prima di rispondere, potrei non aver risposto, poiché continuano dicendo che vogliono "scorrere la mia directory poiché viene modificata dinamicamente tramite uno script in esecuzione". meno non sarebbe il comando giusto per quello.
destenson,

Funziona bene per me, anche quando si utilizzano file lunghi 3 byte. Non riesco a immaginare perché non funzionerebbe anche per file più grandi.
Addison,

1
Grande! Per me funziona sia con file brevi che lunghi. Ho appena notato due possibili problemi: 1. lessnon ha riaperto il file usando il suo nome file - cioè quando l'inode del file è cambiato (come nel sovrascrivere il file usando mv) allora il vecchio contenuto del file è rimasto (probabilmente il vecchio inode è stato riletto) - - 2. La prima riga visualizzata probabilmente inizia con lo stesso offset di byte del contenuto del file originale. Pertanto, quando le lunghezze delle linee cambiano, la prima riga visualizzata potrebbe essere incompleta e le linee visualizzate potrebbero spostarsi su / giù.
pabouk,


5

Il tasto "F" durante l'esecuzione lesseseguirà un "follow" simile a tail -f, ma non sono sicuro se questo raggiungerà ciò che stai cercando qui.


5

Normalmente digito solo Gper adattare l'output su una volta. Lo trovo particolarmente utile su un file system di rete come CIFS.


Si tratta più di un aggiornamento su richiesta del file aperto con meno. Oltre a saltare alla fine del file, ricarica anche il file se è cambiato.
Jorb,

1
Grazie. La prima volta non mi ha rinfrescato, ma ora sembra funzionare correttamente. Nell'uomo non è scritto che aggiorna il file. man less: 'G o> o ESC-> Vai alla riga N nel file, predefinito alla fine del file.' Cancella qui i miei vecchi commenti sbagliati, scusatemi per loro.
Yaroslav Nikitenko l'

1
A proposito, come si chiama una "base una tantum"? Il manutentore di less, Mark Nudelman, ha risposto: "Il comando G normalmente non forza una rilettura del file come fa il comando R. Può sembrare che la fine del file non sia stata ancora letta quando G viene invocato, in modo che il salto alla fine del file debba leggere i dati lì per la prima volta. Ad esempio, se si salta alla fine con G, quindi si torna all'inizio con 1G, un altro programma modifica i dati in fine del file (senza modificare la lunghezza), "(cont)
Yaroslav Nikitenko

(cont) "poi salti di nuovo alla fine con G, non vedrai i dati modificati. Ma se non salti alla fine e torna all'inizio, la prima volta che esegui il comando G deve leggere i dati lì per la prima volta, e ovviamente vedrà eventuali modifiche che sono avvenute da quando ne sono state invocate meno. "
Yaroslav Nikitenko,

In questo caso ho menzionato che si trattava di un aggiornamento una tantum anziché di un aggiornamento dinamico , che fa parte di ciò che la domanda originale sta ponendo.
Jorb,

1

Puoi usare vim per leggere il file, quindi aggiungere il seguente mapping al tuo .vimrcfile e puoi ricaricare facilmente un file con ,r:

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

Nota se hai già modificato il file, vim si lamenterà. Passa a

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

Per ignorare le modifiche.


Dovranno fare leva sulle vimtue mani fredde e morte. Il contesto della domanda riguarda less, ma come persona con tendenze monomaniacali me ne rendo conto!
Benjamin R,

1

Rper ridipingere non ricarica sempre il file. [1]

Una soluzione alternativa che ricarica sempre il file è premere hq, che aprirà la pagina di aiuto, quindi si chiuderà. Ha un effetto collaterale nel forzare la ricarica del file.


[1] Ecco alcuni esempi di situazioni che Rsi verificano e non si ricaricano:

  • >e >>modifiche: viene ricaricato
  • sed -i, gEdit, TextEdit: NON ricaricare
  • Su Linux, le vimodifiche: vengono ricaricate
  • Su Mac, vimodifiche: NON ricaricare

Credo che la differenza sia dovuta al fatto che l'inode cambi (è possibile verificare con ls -i foo.txt). Se l'inode cambia, allora Rnon funzionerà.


0

Potresti tail -finvece reindirizzarlo , ti farebbe seguire l'output. Perderesti comunque la possibilità di muoverti (scorrere) nell'output.


0

Se non si è contrari all'utilizzo di un browser, è possibile avviare il server Web Algernon con questo comando:

algernon -a -t /directory/name

Verrà quindi visualizzato e aggiornato automaticamente un elenco di file all'indirizzo http: // localhost: 3000 /


Discussione sbagliata? ..
Tomasz,

Sembra essere un modo per guardare una directory, anche se è molto lontana daless
Jeff Schaller

0

Ho appena trovato questa discussione come chiunque altro. Vorrei aggiungere la soluzione di quando sei già alla fine del file, usando 'g' seguito da 'G' forzerà un aggiornamento del file.

Ho finito per creare un pulsante macro per questo nel mio programma terminale (SecureCRT). La macro è semplicemente "gG".

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.