Ich leite die Programmausgabe oft auf weniger, z
produce_output | less
Dies funktioniert hervorragend, bis produce_output
große Mengen an Ausgabe erzeugt werden. Wenn ich nach Text suche, der tief in der Datei enthalten ist, werden weniger Berichte erstellt
Calculating line numbers... (interrupt to abort)
Wenn ich mit Strg + C unterbreche, wird auch beendet produce_output
, wodurch keine weitere Ausgabe erzeugt wird. Gibt es eine Möglichkeit, den Interrupt an weniger zu senden, damit er produce_output
weiterläuft?
Ich weiß, dass ich es gebrauchen könnte kill -INT less_process
, aber ich denke, es muss eine bessere Lösung geben.
kill
.select
auf die Eingabe von einer Datei / Pipe und einem Terminal warten kann .F
(Follow) -Modus. Pipes und ttys sind auf die gleiche Weise abrufbar.Sie können Zeilennummern mit dem deaktivieren
Möglichkeit.
quelle
Bei der Arbeit mit großen Ausgabemengen fand ich es sehr hilfreich, die Ausgabe an eine Datei zu senden und zu verwenden
tail -f
oderless +F
zu beobachten, z.Die
2>&1
Syntax stellt sicher, dass sowohl stdout als auch stderr zuout
--- gehen. Entfernen Sie dies, wenn Sie nur möchten, dass stdout in die Datei wechselt. Auf diese Weise können Sie die Ausgabe auf verschiedene Arten überprüfen (auch von einem anderen Computer aus), ohne sich mit dem Programm herumschlagen zu müssen, das die Ausgabe erzeugt.Beachten Sie, dass dies
2>&1
möglicherweise Bash-spezifisch ist (ich bin mir nicht sicher). Stellen Sie sicher, dass Sie genügend Speicherplatz für die Ausgabedatei haben :-)quelle
2>&1
ist POSIX, nackt>&
ist ein Bashismus.less +F
in meinem Beispiel verwenden sollen; Ich habe gerade meine Antwort aktualisiert.less +F
(daless +F
die generierten Daten verarbeitet werden). Das Beispiel, das ich gegeben habe, hat nicht das gleiche Problem wie ursprünglich gepostet: Strg + C wird nicht unterbrochenprocess_output
. Wenn man sich nicht für die ‚folgen‘ Funktionalität schert, kann man laufenproduce_output > out 2>&1
, dannless out
. Ein Problem dabeiproduce_output | less
ist, dass wenn irgendetwas das Rohr bricht (z. B. versehentlich 'q' trifftless
),produce_output
es stirbt (ohne spezielle SIGPIPE-Handhabung).Sie können dies auch einfach tun:
quelle