web-dev-qa-db-ja.com

Ubuntuで矢印キーを押したときに、端末に「^ [[A」 "^ [[B" "^ [[C" "^ [[D"と表示されるのはなぜですか?

私は最初にWindows上のAnsi Cで小さなプログラムを作成し、組み込みのGCCを使用してUbuntuでコンパイルしました。

プログラムは簡単です:

  • scanf()を使用してコンソールから行を読み取ります。
  • 文字列を分析して計算します。

しかし、奇妙なことが起こります。カーソルを移動しようとすると、4文字が印刷されます。

  • 押す Up 「^[[A "
  • 押す Dn 「^[[B "
  • 押す Rt 「^[[C "
  • 押す Lt 「^[[D "

  • どうすればこれを回避できますか?

  • カーソルを移動するのではなく、なぜこれらの4文字を印刷するのですか?

42
Kevin Dong

それは、キーボードが実際にPCに送信するものであるためです(より正確には、端末が実際にキーボードから受信するものを印刷するものです)。 bashは、たとえば、それらの値を取得し、それらを解読し、移動したいことを理解します。そのため、カーソルを移動(左/右の場合)するか、履歴を使用して前のコマンドをフェッチします(上/下) )。したがって、プログラムが魔法のように矢印キーをサポートすることは期待できません。

ただし、端末からの標準入力からの読み取りはすでに左/右矢印キーをサポートしています(私は信じていますが、テストと確認のために今のところLinuxにはいません)。それで、私の推測では、干渉する別の問題があると思います。考えられる原因の1つは、修飾キーの1つがスタックしていることです。おそらく、ALT、CTRL、またはSUPER?

22
Shahbaz

Osx(mac)から来ている人のために、シェルをbashに変更してみてください

Terminal -> Preferences -> Shells open with -> [select] Command (complete path)

その後貼り付けます

/bin/bash

12
KhaledMohamedP