使用すると、less file1 file2
Less 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'