回答:
less
テキストを標準出力に出力します。標準出力
less text | cut -d: -f1
)less text > tmp
)「isa tty」と呼ばれるC関数があり、出力がtty(4.81未満、main.c、112行目)に送信されるかどうかをチェックします。その場合、バッファビューアを使用しcat
ます。それ以外の場合は、のように動作します。
bashではtestを使用できます(を参照man test
)
例:
[[ -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'
stdout
「ファイルに書き込む」ことができるものではありません。それはあなたがwrite()
するものです。 less
出力がファイル、パイプ、ソケット、ブロックデバイスなどのいずれであるかに応じて、異なる処理を行う必要はありません。ttyではないことが重要であるため、のように動作しcat
ます。(あなたはこれを知っていて、それを説明するのに間違った言葉を選んだと思いますが、他の読者のためにこれを指摘したいと思いました)。
less
「図」にはなりませんcat
。cat
stdoutがttyではない場合、次の内容に関係なく動作します。
less
が先に進み、1つのTCGETSを使用して端末の寸法を取得するか、それがttyではないことを発見すると思いましたが、どうやら間違っていると思いました。
less
stdout
端末であるかどうかを確認し、端末でcat
ない場合と同様に動作します(EOFまでstdinをstdoutにコピーします)。
この機能を使用すると、ファイルへの簡単なリダイレクトを許可--help
しless
ながら、常に出力(例:出力)を送信するスクリプトまたはプログラムを作成できます。some_command --fullhelp > help.txt
stdinのスペースバーがテキストまたは何かをページングするのをまだ待っているなら、それはうんざりするでしょう。一部のコマンド(例man
:)は、自分の出力をチェックして、ページャー経由で出力を送信するかどうかを決定します。あなたが走るならman ls > ls.txt
、それはあなたの$PAGER
。
less
パイプラインにさらにステージを追加するときに、ワンライナーから編集するのを忘れた場合、猫のような動作は便利です。
less
端末の寸法を把握する必要があります(画面サイズ、一度に表示する行数を知るため)。ioctl(2)
それは上の使用していますstdout
、それはとにかく非端子ケースを扱う避けることができないので、非端末にENOTTYが返されます。 less
実際にはisatty(3)
端末の寸法をチェックする前に使用しますがisatty
、ttyのみのioctlを試し、エラーがないかどうかをチェックすることで機能します。
more(1)
(少なくともutil-linuxバージョンのような)単純なページャーでさえ、この機能を備えています。これはおそらく、その場合に実装する最も単純な正気の振る舞いだからです。
あなたはパイプに何かすることを注意に less
(例えばgrep foo bar.txt | less
)、それを開く必要がない/dev/tty
キーボード入力のために。(これを行うには、を参照してくださいecho foo | strace less
)。
bash script.sh
、bash script.sh | cat
、bash script.sh > file
、とあなたは何を得るの出力を参照します。