Früher habe ich für ein Unternehmen gearbeitet, das eine angepasste Shell für die Verwaltung eines seiner Produkte unter Linux hatte, und ich versuche, eine wichtige Funktion dieser Shell zu replizieren.
Die gesamte Arbeit wurde von einem Hintergrundprozess erledigt, und die Ausgabe aus dem Protokoll wurde allen verbundenen Benutzern angezeigt.
Das Protokoll wird im Hintergrund zu Ihrer Shell angezeigt, und die Eingabeaufforderungszeile bleibt immer ganz unten.
Zum Beispiel
Log line 1
Log line 2
Log line 3
![ROOT@PRODUCT51-LIVE]:~/ #
Die Art und Weise, wie ich dies mit bash versuchte, bestand darin, einen getrennten Schwanz in der .bashrc-Datei des Benutzers zu starten, aber wenn die Ausgabe des Befehls an stdout gesendet wird, kommt sie unter der Bash-Eingabeaufforderung herein, z
![ROOT@PRODUCT51-LIVE]:~/ #Log line 1
Log line 2
Log line 3
Und der Benutzer müsste die Eingabetaste drücken oder CtrlCfür eine saubere Eingabeaufforderung.
Ich habe keine Ahnung, wie ich die Eingabeaufforderung immer ans Ende der Ausgabe bringen kann, und ich glaube, ich verwende die falsche Terminologie, um bei Google etwas zu finden, da ich kein Glück habe - weiß jemand, wie das geht? mit Bash?
tail -f
Ausgabe und der Eingabeaufforderung sowie der Befehlsausgabe, wenn Sie einen Befehl eingeben, der eine erhebliche Menge an Ausgaben enthält, insbesondere wenn Ihr Hintergrundprozess seine Ausgabe aktiv sendet?Antworten:
Das Folgende tut was Sie brauchen, ohne tmux oder screen oder andere Programme zu benutzen. Hält die Eingabeaufforderung unten. Ersetzen Sie "/ var / log / cron" durch die gewünschte Datei:
der Schlüssel dazu sind die ANSI-Steuerzeichen für das Terminal. Insbesondere die Anweisung "\ e [x; y", mit der ein neuer scrollbarer Bereich festgelegt wird. Wenn also jede Zeile der Protokolldatei gelesen wird, wird die unterste Zeile des Fensters aus dem bildlauffähigen Bereich ausgeschlossen, die Zeile aus der Protokolldatei wird eingefügt und der untere Teil wird wieder eingefügt.
quelle
Die Antwort lautet screen oder tmux wurde verwendet
Ich werde erklären, wie Sie dies über den Bildschirm konfigurieren können
1) Installieren Sie den Bildschirm entweder unter Verwendung
apt-get install screen
von Ubuntu / Debian- oderyum install screen
RedHat-Derivaten.2)
screen -S shell_and_logs
3) Drücken Sie dann Ctrl+ aund anschließend
S
(Großbuchstabe S).Ein horizontaler Bildschirm wird angezeigt
4) Drücken Sie Ctrl+ agefolgt von TAB
Dies springt zum zweiten geteilten Fenster.
5) Erstellen Sie hier ein weiteres Fenster, damit Sie die Eingabeaufforderung erhalten, indem Sie die Tasten Ctrl+ aloslassen und dann drücken
c
6) Sie können die zweite windo Größe ändern , indem Sie Ctrl+ adann eingeben ,
:resize
nach demLines:
erscheinen. Geben Sie die Anzahl der Zeilen ein, die Sie anzeigen möchten.7) Schließlich können Sie mit Ctrl+ und aanschließend zwischen den Fenstern wechseln TAB
quelle
tail -F /var/log/messages &
ist eine andere Möglichkeit, Ihnen Nachrichten anzuzeigen, wenn sich etwas ändert, beispielsweise wenn ein Anmeldefehler festgestellt wird oder wenn bei einem Dienst Probleme auftreten. Dies ist jedoch nicht ideal, da es Ihre interaktive Shell durcheinander bringt.screen
undtmux
das kann dies tun - zum Beispiel einige der BSDs mit einem Schiffwindow
Befehl. Angesichts der Auswahl würde ich diese Lösung aufgrund ihrer Flexibilität entweder einer benutzerdefinierten Shell oder den anderen verfügbaren Optionen vorziehen. Es mag für den Endbenutzer nicht so transparent sein, aber er wird den Unterschied nicht wirklich kennen, und Hauptbenutzer / Systemadministratoren können die zusätzliche Flexibilität von nutzenscreen
.t=$(mktemp); printf '%s\n' 'screen tail -F /var/log/messages' split focus screen > "$t"; screen -S screenname -c "$t"
Sie es in ein Skript und führen Sie es jedes Mal aus, wenn Sie möchten. Vielen Dank an geirha für diesen Eintrag bei #bash @ irc.freenode.org