Durch Hinzufügen des Endverhaltens bei Eingabe werden weniger Leerzeilen hinzugefügt

8

Ich liebe es less, mit dem ich Protokolle mit der +FFlagge (oder dem ShiftFHotkey) verfolgen , vorwärts und rückwärts suchen und mich im Allgemeinen frei im Dokument bewegen kann.

Aber eines fehlt less: Normalerweise bin ich am Ende der Datei und möchte, dass neue Dinge passieren. In tail -fwürde ich nur entermehrmals treffen , und neue Protokollzeilen würden nur deutlich von alten Zeilen getrennt erscheinen.

Ist es möglich, dies hinzuzufügen less? Wie?

verdammt schnell
quelle
Ich glaube nicht, dass du das kannst, obwohl ich manchmal echo -e '\ n \ n \ n \ n \ n' >> / dev / pts / 0 mache, zum Beispiel ist es nicht so sauber, aber zumindest lässt es Ich habe einen Bezugspunkt, an dem ich aufgehört habe, als ich wegschaute.
David Houde

Antworten:

6

Dies ist nicht wirklich taildas Verhalten - es ist das Terminal. Tail sendet lediglich einen Ausgabestream an stdout, der an Ihr Terminal gesendet wird, und Sie fügen leere Zeilen in die Mitte dieser Ausgabe ein, indem Sie die Eingabetaste drücken. Tail selbst akzeptiert überhaupt keine Eingaben von Ihnen. Sie können eingeben, was Sie möchten, und das wird auch angezeigt.

lessEs handelt sich jedoch um eine Konsolen-App, die Eingaben entgegennimmt und verarbeitet. Die Konsole wird mithilfe von Terminalsteuerungssequenzen verwaltet. So können Sie einen Bildlauf durchführen. Wenn Sie beliebige Zeichen in den Stream einfügen, wird die Anzeige durcheinander gebracht, und Ihre Eingabe wird ohnehin weniger zur Steuerung des Programms verwendet.

Leider scheint es keine Möglichkeit zu geben, die aktuelle Position visuell zu markieren. Das ist nicht ein schrecklicher Feature - Request, aber, und weniger ist immer noch neue Features von Zeit zu Zeit.

mattdm
quelle
Haben Sie einen Link zur Hand, um diese Funktion bei den weniger Mantainern anzufordern?
Dangonfast
@gonvaled gnu.org/software/less
Michael Hampton
4

Ich habe Ihre Frage gefunden, als ich die gleiche Antwort für mich gesucht habe.

Enttäuscht von der akzeptierten Antwort fand ich eine Problemumgehung. Es ist weniger als ideal, aber es ermöglicht mir, meine Position in dem Protokoll zu markieren, mit dem ich verfolge less, worauf es ankommt.

Ich habe ein kleines ausführbares Skript (ich habe es genannt marklog) mit den folgenden Inhalten erstellt und es in meinen Pfad eingefügt:

#!/bin/sh
echo >> $1
echo >> $1
echo >> $1
echo `date` ---------------------------------------------------------------------- >> $1
echo >> $1
echo >> $1

Dies funktioniert natürlich nur, wenn Sie Schreibzugriff auf die Protokolldatei haben - was in vielen Situationen ein Deal-Breaker sein kann. Ich habe auch diese Version erstellt, mit der ich in Protokolldateien schreibe, die ich nicht besitze (auf die ich aber Sudo-Zugriff habe):

#!/bin/sh
sudo sh -c "echo >> $1"
sudo sh -c "echo >> $1"
sudo sh -c "echo >> $1"
sudo sh -c "echo `date` ------------------------------------------------------------------------- >> $1"
sudo sh -c "echo >> $1"
sudo sh -c "echo >> $1"

Diese Skripte bieten genau die Art von visueller Unterbrechung, nach der ich gesucht habe. Es gibt mindestens drei Möglichkeiten, wie Sie sie verwenden können:

  1. An dem Punkt, an dem Sie bei der Verwendung normalerweise einige Male die Eingabetaste drücken tail -f, führen Sie stattdessen die Ausführung marklogvon einem anderen Terminal aus (geben Sie den Pfad zur Protokolldatei als Argument an).

  2. Verwenden Sie diese Option, um das Skript CtrlZanzuhalten, lessdamit Sie es im selben Terminalfenster ausführen können. Wenn Sie es jedoch erneut in den Vordergrund stellen less( fgnatürlich mit), befindet es sich nicht mehr im Verfolgungsmodus, sodass Sie erneut drücken müssen ShiftF...

  3. Schließlich - und dies ist möglicherweise der bequemste Weg, da Sie den Pfad zur Protokolldatei nicht eingeben müssen : Führen Sie ihn marklogdirekt lessdurch Eingabe aus !marklog %. Lessersetzt den aktuellen Dateinamen %. Reagiert lessjedoch nicht auf die! Während es sich im "Follow" -Modus befindet, müssen Sie CtrlCzuerst drücken, um den Follow-Modus zu verlassen, ausführen !marklog %und dann ShiftFerneut.

Mit Methode 3 erhalten Sie außerdem den zusätzlichen Bonus des Befehlsverlaufs von Less: Drücken Sie einfach die Taste !und wählen Sie mit dem Aufwärtspfeil den neuesten Befehl aus (für mich ist dies immer der Fall marklog).

Hoffe das hilft jemandem so sehr wie mir schon geholfen hat.

Lambart
quelle
1

Drücken Sie am Ende der Datei Shift+ Fund weniger funktioniert als tail -f.

kofemann
quelle
2
Nein, das wird es nicht. Es wird neuen Zeilen folgen, aber es wird nicht so funktionieren tail -f. Insbesondere wird die Eingabe als Zeilenumbruch nicht akzeptiert, was der einzige Punkt meiner Frage ist. Außerdem habe ich bereits Shift+Fin der Frage erwähnt (mit einem kleinen Fehler muss ich sagen)
dangonfast
1

Ich glaube nicht, dass du das kannst. Ich habe mund verwendet ', um interessante Orte zu markieren und sie dann wieder aufzurufen, aber dies gibt Ihnen nicht die Trennung, nach der Sie fragen. Vielleicht macht so etwas wie Multitail, was Sie wollen.

user9517
quelle
-1

Die Antwort von Lambart bringt mich zu meiner Lieblingslösung. Danke an Lambart!

Geben Sie einfach den Folgemodus ein ctrlcund rufen Sie auf !printf "\n\n---$(date)---\n\n" >> %. Danach müssen Sie noch einmal drücken enterund drücken shiftf, um der Datei erneut zu folgen.

iRaS
quelle