less file1 file2 猫 - なぜ動作しますか?

less file1 file2 猫 - なぜ動作しますか?

使用すると、less file1 file2Less Buffer Viewerに表示されている2つのファイルが取得されますが、標準出力に追加された2つのless file1 file2 | catファイルの内容が印刷されます。 「少ないバッファビューア」を表示する必要があるのか​​、次のコマンドのためにstdoutで出力を生成する必要があるのか​​、lessはどうすればわかりますか?これにはどのようなメカニズムが使用されますか?

ベストアンサー1

lessテキストを標準出力として印刷します。標準出力は次のとおりです。

  • 端末(/dev/tty?)とデフォルトのバッファビューアを開きます。
  • 経由管路less text | cut -d: -f1|()を使用して別のプログラムにパイプする場合
  • 文書less text > tmp>()を使用してリダイレクトする場合

「isa」というC関数があります。端末「出力がtty(4.81未満、main.c、112行)に送信されていることを確認してください。そうであればバッファビューアを使用し、そうでない場合と同じように動作しますcat

Bashではテストを使用できます(参照man test)。

  • -t FD ファイル記述子 FD が端末で開きます。
  • -pファイルが存在し、名前付きパイプです。

例:

[[ -t 1 ]] && \
    echo 'STDOUT is attached to TTY'

[[ -p /dev/stdout ]] && \
    echo 'STDOUT is attached to a pipe'

[[ ! -t 1 && ! -p /dev/stdout ]] && \
    echo 'STDOUT is attached to a redirection'

おすすめ記事