
これは、k 画面分のテキスト (デフォルトは 1) を前方にスキップするために使用される のマニュアル ページに記載されています。 を使用して非常に長いファイルを保存しmore
、それをページごとに画面に表示していましたが、最初のページ自体を押すと、前方に移動するのではなく、表示してからファイルが閉じてプロンプトが戻ります。 を使用して移動しようとすると、期待どおりに正常に動作しています。ファイルの長さが十分に長いため、1 ページごとにスキップして前方に移動するはずです。なぜこのように異なる動作が表示されるのでしょうか。f
cat
more
f
... skipping 29 lines
spacebar
答え1
次の実験を試してみてください:
- 25 行のターミナルを開きます。
- 走る
seq 1 1 100 > test_text
。 - 走る
more test_text
。 - 画面の最後から 1 行目を見てください。そこには と表示されています
24
。 - 押すfとスキップページ。
- 画面の最初の行を見てください。 と表示されます
49
。
fテキストのページをスキップします。つまり、ファイルの最初の「ページ」が表示され、 を押すfと、3 ページ目が表示されます。
この時点で、もう一度押すと、ファイルの最後の 4 行がf表示されます。5ページ目を表示するのに十分な行数がないため、終了します。... skipping 24 lines
more
代わりにを使用してもう一度お試しくださいspace。spaceページはスキップされません。すべてのページが表示されます。
編集
この回答はmore version 5.19 (Berkeley 6/29/88), which is currently in use in the Linux community
(もっと男)。@Kusalananda が報告しているように、「実験」の結果はバージョン/ユニックスによって異なる場合があります。
line
との違いrow of text on a terminal
多くの場合、これら 2 つの定義は互換性があります。この場合、これらを区別することが重要です。
- 行は、テキスト ファイル内の改行 (文字
\n
) で終わる文字のシーケンスです。wc -l
コマンドは、ファイル内の行数をカウントします。行の長さは、0 から無限までの任意の数値にすることができます。 - 端末上のテキスト行は、端末上に表示される文字のシーケンスです。端末の幅と同じ固定長を持ちます。
私の最初の「実験」は単純すぎたため、すべての線が(間違いなく)列よりも短かったです。
ファイルでは、おそらく行が列よりはるかに長いでしょう。それを表示するには、more
各行を複数の行に配置します。
新しい実験を試してみましょう:
次の内容のファイルを作成します
example
:006 XX\n010 XXYYYY\n015 XXYYYYZZZZZ\n
これは 3 行のファイルです。各行の長さは、6、10、15 文字の順です。数字の後のスペースも忘れずに数えてください。
実行します
wc -l example
。結果は 3 です。8列の端末では、次のような表示が出るはずです。
006 XX 010 XXYY YY 015 XXYY YYZZZZZ
最初の行は 8 文字の長さです:
006
+ スペース +XX
+ スペース 2 つ。2 行目は 8 文字の長さです:
010
+ スペース +XXYY
.3 行目は 8 文字の長さ:
YY
+ 8 個のスペースです。などなど
3 行のテキストが 5 行のテキストになりました。
のマニュアルページには次のようにmore
書かれています:
f Skip forward k screenfuls of text. Defaults to 1.
これは、more
ターミナルのすべての行を埋めるために、テキストの特定の行をスキップすることを意味します。
答え2
しかし、それは表示され
...skipping 29 lines
、その後ファイルは閉じられ、プロンプトが戻ります
これは、 を押してf
ドキュメントの末尾に到達したときに発生します。
たとえば、40 行のファイルがあり、 を実行するとmore myfileof60lines.txt
、最初の 29 行が表示されます。次に を押すとf
、次の 29 行がスキップされますが、その前にドキュメントの末尾に到達します。そのため、 が表示され...skipping 29 lines
、ドキュメントの末尾に到達したときの通常の動作でmore
あるプロンプトに戻ります。