
In der Manpage von wird angegeben, more
dass es f
verwendet wird, um k Bildschirmtext vorwärts zu springen (Standardwert: 1). Ich habe eine sehr lange Datei mit gespeichert cat
und more
sie Seite für Seite auf dem Bildschirm angezeigt, aber als ich f
auf die erste Seite selbst gedrückt habe, wurde nicht vorwärts navigiert, sondern angezeigt, ... skipping 29 lines
und dann wird die Datei geschlossen und die Eingabeaufforderung wird wieder angezeigt. Wenn ich versuche, damit zu navigieren, spacebar
funktioniert es wie erwartet. Da die Dateilänge ausreichend lang ist, sollte es vorwärts navigieren, indem jedes Mal 1 Seite übersprungen wird. Warum zeigt es ein so unterschiedliches Verhalten?
Antwort1
Versuchen Sie dieses Experiment:
- Öffnen Sie ein Terminal mit 25 Zeilen.
- Laufen
seq 1 1 100 > test_text
. - Laufen
more test_text
. - Schauen Sie sich die vorletzte Zeile auf Ihrem Bildschirm an. Dort steht
24
. - drücke fum zuüberspringeneine Seite.
- Schauen Sie sich die erste Zeile auf dem Bildschirm an. Dort würde stehen
49
:
füberspringt eine Textseite. Sie haben also die erste „Seite“ der Datei gesehen, Sie haben gedrückt fund die dritte Seite gesehen.
Wenn Sie an dieser Stelle ferneut drücken, werden ... skipping 24 lines
die letzten 4 Zeilen der Datei angezeigt. more
Sie werden beendet, da nicht genügend Zeilen vorhanden sind, um eine fünfte Seite anzuzeigen.
Versuchen Sie es erneut mit spacestattdessen. spaceSeiten werden nicht übersprungen. Sie sehen alle Seiten.
Bearbeiten
Diese Antwort bezieht sich auf more version 5.19 (Berkeley 6/29/88), which is currently in use in the Linux community
(sieheMann mehr). Wie @Kusalananda berichtet, kann das Ergebnis des „Experiments“ bei verschiedenen Versionen/Unices unterschiedlich ausfallen.
Unterschied zwischen a line
und arow of text on a terminal
Oft werden diese beiden Definitionen synonym verwendet. In diesem Fall ist es wichtig, sie zu unterscheiden.
- Eine Zeile ist eine Zeichenfolge in einer Textdatei, die mit einem Zeilenumbruch (dem
\n
Zeichen) endet.wc -l
Der Befehl zählt die Anzahl der Zeilen in einer Datei. Die Länge einer Zeile kann eine beliebige Zahl zwischen null und unendlich sein. - Eine Textzeile (auf einem Terminal) ist eine Zeichenfolge, die auf einem Terminal angezeigt wird. Ihre Länge entspricht der Breite des Terminals.
Mein erstes „Experiment“ war zu einfach, alle Linien waren (ziemlich sicher) kürzer als die Reihen.
In Ihrer Datei sind die Zeilen wahrscheinlich viel länger als die Reihen. Um sie anzuzeigen, more
wird jede Zeile in mehreren Reihen angeordnet.
Versuchen wir ein neues Experiment:
Erstellen Sie eine Datei
example
mit diesem Inhalt:006 XX\n010 XXYYYY\n015 XXYYYYZZZZZ\n
Dies ist eine 3-zeilige Datei. Die Länge jeder Zeile beträgt in der Reihenfolge: 6, 10 und 15 Zeichen. Vergessen Sie nicht, das Leerzeichen nach der Zahl mitzuzählen.
Lauf
wc -l example
. 3 ist das Ergebnis.Auf einem 8-Spalten-Terminal sollten Sie etwa Folgendes sehen:
006 XX 010 XXYY YY 015 XXYY YYZZZZZ
Die erste Zeile ist 8 Zeichen lang:
006
+ ein Leerzeichen +XX
+ 2 Leerzeichen.Die zweite Zeile ist 8 Zeichen lang:
010
+ ein Leerzeichen +XXYY
.Die 3. Zeile ist 8 Zeichen lang:
YY
+ 8 Leerzeichen.Usw. usw.
Aus Ihren 3 Textzeilen werden jetzt 5 Textzeilen.
Auf der Manualpage von more
heißt es:
f Skip forward k screenfuls of text. Defaults to 1.
Dies bedeutet, dass more
so viele Textzeilen übersprungen werden, um alle Zeilen des Terminals zu füllen.
Antwort2
aber es wird angezeigt
...skipping 29 lines
und dann wird die Datei geschlossen und die Eingabeaufforderung wird zurückgegeben
Dies geschieht, wenn Sie drücken f
und das Ende des Dokuments erreichen.
Beispiel: Sie haben eine Datei mit 40 Zeilen. Sie drücken more myfileof60lines.txt
, die ersten 29 Zeilen werden angezeigt. Dann drücken Sie f
, damit die nächsten 29 Zeilen übersprungen werden. Zuvor wird jedoch das Ende des Dokuments erreicht. Sie sehen also ...skipping 29 lines
, und das normale Verhalten, more
wenn das Ende des Dokuments erreicht wird, nämlich eine Rückkehr zur Eingabeaufforderung.