私は、あるttyから別のttyへの書き込み、設定の変更tty1
などのさまざまなトリックを実行して、端末がどのように機能するかを理解しようとしています。tty2
また、キーボードから直接エスケープシーケンスを送信して色を変更してみました。つまり、echo -e '\e[0;31m'
コマンドを通すのではなく、直接キーボード入力を介することです。これはうまくいきません。
私は次の手順を実行します。
tty1
開いてtty2
- スリープモードに入って
tty2
いるときにを押します。 「一つ」という単語を入力してください。bash
sleep 10m
- 行って
tty1
みてくださいecho -n ^[[0;31m > /dev/tty2
。最初の文字^[
はこのように入力されますCtrl+v Esc - 戻って
tty2
「two」という単語を入力してください。はい - 他のttyのコマンドで色が赤に変わりました。
- 手順3、4を繰り返しますが、緑色と「3」という単語を使用してください。
- 最後に、別の文字列を介してエスケープシーケンスを送信せずに
tty
キーボードから直接^[[0;37m
入力して、すべてのtty2
操作を同じ方法で実行しましたEsc(readlineがスリープモードなので、+は必要ありませんCtrl)。しかし、次のようになりました。v[0;37m
質問: なぜこれが起こるのですか?すべての文字は同じで、端末の状態は同じですが、ある場合は端末がエスケープシーケンスを取得し、他の場合はそうではありません。
編集する
この質問に対する答えは次のとおりです。Linux ttyで解釈されないエコーエスケープシーケンス。
ベストアンサー1
を実行するとecho
送信されます。出力ターミナルに行きます。端末は、送信された出力の色を変更するなどのエスケープシーケンスを解釈します。これらのエスケープシーケンスはアプリケーションから送信するためのものなので、端末で実行されているアプリケーションの出力から認識されます。通常、ターミナルで実行されるアプリケーションはターミナルエミュレータ(シェル)によって起動され、順番に起動されるアプリケーションですが、実行すると実際には「echo … >/dev/tty2
ターミナルecho
で実行中」です(一種の出力がターミナルに渡されることが重要です。)
などを押すとEsc [送信されます入力するターミナルに行きます。端末は、受信する入力の色を変更するなど、エスケープシーケンスを解釈しません。端末は入力のエスケープシーケンスを解釈しますが、まったく異なる目的で使用されます。これはファンクションキーの押し方をエンコードする方法です。
キーボード入力とテキスト出力はどのように機能しますか?関連する背景知識が必要です。