GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Das Hinzufügen von Tail-Verhalten, bei dem enter Leerzeilen zu less hinzufügt

Das ist nicht wirklich tail 's Verhalten -- es ist das Terminal. Tail sendet nur einen Ausgabestrom an stdout, der an Ihr Terminal geht, und Sie fügen Leerzeilen 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 wollen, und das wird auch angezeigt.

less , ist jedoch eine Konsolen-App, die Eingaben entgegennimmt und verarbeitet. Es verwaltet die Konsole mithilfe von Terminal-Steuersequenzen, mit denen Sie herumscrollen können. Sie beliebige Zeichen in den Stream einfügen zu lassen, würde die Anzeige durcheinander bringen und Ihre Eingabe sowieso weniger zur Steuerung des Programms verwenden.

Leider scheint es keine Möglichkeit zu geben, die aktuelle Position visuell zu markieren. Das ist jedoch keine schreckliche Feature-Anfrage, und weniger tut es trotzdem von Zeit zu Zeit neue Funktionen erhalten.


Ich habe Ihre Frage gefunden, als ich selbst nach derselben Antwort gesucht habe.

Enttäuscht von der akzeptierten Antwort fand ich eine Problemumgehung. Es ist alles andere als ideal, aber es erlaubt mir, meine Position im Protokoll, dem ich folge, mit less zu markieren , das ist der springende Punkt.

Ich habe ein kleines ausführbares Skript erstellt (ich nannte es marklog ) mit folgendem Inhalt und füge es in meinen Pfad ein:

#!/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 könnte. Ich habe auch diese Version erstellt, die ich verwende, um in Protokolldateien zu schreiben, 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 3 Möglichkeiten, wie Sie sie verwenden können:

  1. An der Stelle, an der Sie normalerweise ein paar Mal die Eingabetaste drücken würden, wenn Sie tail -f verwenden , führen Sie stattdessen marklog aus von einem anderen Terminal (mit Angabe des Pfads zur Protokolldatei als Argument).

  2. Verwenden Sie Strg Z um less auszusetzen Sie können das Skript also im selben Terminalfenster ausführen, aber wenn Sie less wieder in den Vordergrund stellen (mit fg , natürlich), wird es sich nicht mehr im „Folgen“-Modus befinden, also müssen Sie Shift drücken F nochmal...

  3. Zu guter Letzt – und dies ist möglicherweise der bequemste Weg, da Sie den Pfad zur Protokolldatei nicht eingeben müssen:Führen Sie marklog aus direkt von less indem Sie !marklog % eingeben . Less ersetzt % durch den aktuellen Dateinamen . Allerdings less reagiert nicht auf die ! während es sich im „Folgen“-Modus befindet, müssen Sie also Strg drücken C Führen Sie zuerst !marklog % aus, um den Folgemodus zu verlassen , dann Shift F nochmal.

Mit Methode 3 erhalten Sie auch den zusätzlichen Bonus von Less' Befehlshistorie:Drücken Sie einfach die ! und verwenden Sie dann den Aufwärtspfeil, um den neuesten Befehl auszuwählen (bei mir ist es immer marklog ).

Hoffe, das hilft jemandem so viel wie mir bereits geholfen hat.


Linux
  1. Schwanzausgabe mit Sed einfärben?

  2. Protokollüberwachung mit tail oder weniger

  3. Drucken Sie eine Datei, wobei Sie die ersten X-Zeilen in Bash überspringen

  4. Simulieren des ENTER-Tastendrucks im Bash-Skript

  5. Hinzufügen von Benutzern zu sudoers durch Shell-Skript

Wie kann man die -f-Ausgabe mit Farben nur mit Awk anpassen und den Rest der Ausgabe anzeigen?

Debian – Wo soll ich das Sudo in diesen Befehl einfügen??

Diff Wo Linien meistens gleich, aber außer Betrieb sind?

Tail -f beenden, nachdem N Zeilen gedruckt wurden?

Wie kann ich einen Befehl in eine Datei ausgeben, ohne bei einem Fehler eine leere Datei zu erhalten?

Verwenden von tail, um einer Datei zu folgen, ohne die neuesten Zeilen anzuzeigen