ほとんどの人が何度も行ったことがあるので、 less
を使用して長いテキストを表示すると便利です。 :
some_command | less
これで、そのstdinがパイプ(FIFO)に接続されました。 up / down / quitなどのコマンドをどのように読み取ることができますか?
承認された回答:
William Pursellが述べたように、 less
端末からユーザーのキーストロークを読み取ります。 / dev / tty
を明示的に開きます 、制御端末;これにより、標準入力とは別のファイル記述子が提供され、そこからユーザーの対話型入力を読み取ることができます。必要に応じて、標準入力から表示するデータを同時に読み取ることができます。 (書き込むこともできます 必要に応じて直接端末に接続します。)
実行すると、これが発生することがわかります
some_command | strace -o less.trace -e open,read,write less
入力を移動し、 less
を終了します 、および less.trace
の内容を確認します : / dev / tty
が開いているのがわかります 、およびファイル記述子0と、 / dev / tty
を開いたときに返された方の両方から読み取ります。 (おそらく3)。
これは、端末からの読み取りと端末への書き込みを確実に行うことを希望するプログラムの一般的な方法です。 1つの例はSSHです。例 パスワードまたはパスフレーズを要求されたとき。
schilyが説明したように、 / dev / tty
の場合 開くことができません、 less
標準エラー(ファイル記述子2)から読み取ります。 少ないコード> の
/dev / tty
の使用 1991年4月2日にリリースされたバージョン177で導入されました。
cat / dev /tty|を実行しようとすると少ない
、Hagen von Eitzenが提案したように、 less
/ dev / tty
を開くことに成功します ただし、 cat
まで入力はありません それを閉じます。したがって、画面は空白で表示され、 Ctrlを押すまで何も表示されません。 C cat
を殺す (または他の方法でそれを殺します);次にless
cat
中に入力したものがすべて表示されます 実行されていて、それを制御できるようにします。