キーボードではエスケープシーケンスを送信できませんが、なぜ他のttyでは送信できますか?

キーボードではエスケープシーケンスを送信できませんが、なぜ他のttyでは送信できますか?

私は、あるttyから別のttyへの書き込み、設定の変更tty1などのさまざまなトリックを実行して、端末がどのように機能するかを理解しようとしています。tty2また、キーボードから直接エスケープシーケンスを送信して色を変更してみました。つまり、echo -e '\e[0;31m'コマンドを通すのではなく、直接キーボード入力を介することです。これはうまくいきません。

私は次の手順を実行します。

  1. tty1開いてtty2
  2. スリープモードに入ってtty2いるときにを押します。 「一つ」という単語を入力してください。bashsleep 10m

ここに画像の説明を入力してください。

  1. 行ってtty1みてくださいecho -n ^[[0;31m > /dev/tty2。最初の文字^[はこのように入力されますCtrl+v Esc
  2. 戻ってtty2「two」という単語を入力してください。はい - 他のttyのコマンドで色が赤に変わりました。

ここに画像の説明を入力してください。

  1. 手順3、4を繰り返しますが、緑色と「3」という単語を使用してください。

ここに画像の説明を入力してください。

  1. 最後に、別の文字列を介してエスケープシーケンスを送信せずにttyキーボードから直接^[[0;37m入力して、すべての tty2操作を同じ方法で実行しましたEsc(readlineがスリープモードなので、+は必要ありませんCtrl)。しかし、次のようになりました。v[0;37m

ここに画像の説明を入力してください。

質問: なぜこれが起こるのですか?すべての文字は同じで、端末の状態は同じですが、ある場合は端末がエスケープシーケンスを取得し、他の場合はそうではありません。


編集する

この質問に対する答えは次のとおりです。Linux ttyで解釈されないエコーエスケープシーケンス

ベストアンサー1

を実行するとecho送信されます。出力ターミナルに行きます。端末は、送信された出力の色を変更するなどのエスケープシーケンスを解釈します。これらのエスケープシーケンスはアプリケーションから送信するためのものなので、端末で実行されているアプリケーションの出力から認識されます。通常、ターミナルで実行されるアプリケーションはターミナルエミュレータ(シェル)によって起動され、順番に起動されるアプリケーションですが、実行すると実際には「echo … >/dev/tty2ターミナルechoで実行中」です(一種の出力がターミナルに渡されることが重要です。)

などを押すとEsc [送信されます入力するターミナルに行きます。端末は、受信する入力の色を変更するなど、エスケープシーケンスを解釈しません。端末は入力のエスケープシーケンスを解釈しますが、まったく異なる目的で使用されます。これはファンクションキーの押し方をエンコードする方法です。

キーボード入力とテキスト出力はどのように機能しますか?関連する背景知識が必要です。

おすすめ記事