Standardmäßiges Auslagern mit „more“ und Weiterleiten an Syslog

Standardmäßiges Auslagern mit „more“ und Weiterleiten an Syslog

Ich habe ein Wrapper-Skript implementiert, das bewirkt, dass alle über dieses Wrapper-Skript ausgeführten Befehle Dinge wie die Ausführungszeit, den Benutzer, der den Befehl ausgeführt hat, und den Exit-Code protokollieren (über rsyslog).

Ich versuche, Paging zu implementieren und habe ein Problem mit dem Befehl „more“ festgestellt. Die Ursache meines Problems liegt darin, dass „more“ anscheinend beendet wird, wenn es an ein anderes Programm weitergeleitet wird, z. B.

echo -e "this\nis\na\ntest" | more -3 | cat

Dadurch werden 4 Zeilen gedruckt. Wenn wir jedoch das „| cat“ am Ende entfernen, wird der Ausdruck wie erwartet nach 3 Zeilen angehalten.

Zugegeben, die Verwendung von „less“ anstelle von „more“ funktioniert, hat jedoch nicht den gewünschten Effekt, da ein separates „Fenster“ geöffnet wird und kein Zurückscrollen nach Abschluss des Vorgangs möglich ist (ich brauche auch nicht die Möglichkeit, so zurückzuscrollen, wie es „less“ ermöglicht).

Meine aktuelle Lösung besteht darin, die Befehle „head“ und „tail“ zu verwenden, um den gewünschten Effekt zu erzielen, aber es gibt auch noch einige andere Herausforderungen zu bewältigen.

Kennt jemand das Geheimnis, wie man „mehr“ so zum Laufen bringt, wie ich es mir vorgestellt habe? Vorschläge für ein anderes, einfacheres Paging-Tool (unterstützt die Aktionen Enter, Leertaste und „q“) sind ebenfalls willkommen.

Danke schön!

Antwort1

Es scheint, dass die teeUmleitung zu einer Datei und die Paging-Funktion für stdout geeigneter sind als das Paging mitten in einer Pipeline:

printf "%s\n" this is a test | tee /tmp/some.file | more -3

verwandte Informationen