GNU/Linux >> Linux の 問題 >  >> Linux

ユーザーからのコマンドを読み取ることができる一方で、「less」はどのようにしてStdinからデータを取得しますか?

ほとんどの人が何度も行ったことがあるので、 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中に入力したものがすべて表示されます 実行されていて、それを制御できるようにします。


Linux
  1. LinuxソフトウェアRAIDで故障したハードディスクを交換する方法

  2. / dev/randomを使用してLinuxでランダムパスワードを生成する方法

  3. Linux:/ dev / console、/ dev / tty、/ dev / tty0の違いは?

  1. Linux – / proc // exeシンボリックリンクは通常のシンボリックリンクとどのように異なりますか?

  2. Linux – / dev / urandomで「u」という文字は何を意味しますか?

  3. /dev/random または /dev/urandom を base64 でエンコードする方法は?

  1. /dev/sda と /dev/sdb をどのように交換しますか?

  2. プロセスが実行されているフォルダーを見つける方法は?

  3. /dev/zero から /dev/null への DD ...実際に何が起こるか