web-dev-qa-db-fra.com

Pourquoi le terminal affiche-t-il "^ [[A" "^ [[B" "^ [[C" "^ [[D" lorsque vous appuyez sur les touches fléchées dans Ubuntu?

J'ai d'abord écrit un petit programme dans Ansi C sur Windows, et je l'ai compilé sur Ubuntu avec le GCC intégré maintenant.

Le programme est simple:

  • lire la ligne de la console avec scanf().
  • Analysez la chaîne et calculez.

Mais quelque chose de bizarre se produit. Lorsque j'essaie de déplacer le curseur, il imprime quatre caractères:

  • pressage Up imprime "^[[A "
  • pressage Dn imprime "^[[B "
  • pressage Rt imprime "^[[C "
  • pressage Lt imprime "^[[D "

  • Comment éviter cela?

  • Pourquoi imprime-t-il ces 4 caractères au lieu de déplacer le curseur?

42
Kevin Dong

Parce que c'est ce que le clavier envoie réellement au PC (plus précisément, ce que le terminal imprime pour ce qu'il reçoit réellement du clavier). bash obtient par exemple ces valeurs, les déchiffre et comprend que vous voulez vous déplacer, il déplacera donc le curseur (en cas de gauche/droite) ou utilisera son historique pour récupérer les commandes précédentes (haut/bas) ). Vous ne pouvez donc pas vous attendre à ce que votre programme prenne en charge les touches fléchées comme par magie.

Cependant, la lecture à partir de l'entrée standard du terminal prend déjà en charge les touches fléchées gauche/droite (je crois, mais je ne suis pas sous Linux en ce moment pour tester et m'assurer). Je suppose donc qu'il y a un autre problème qui interfère. Une cause possible pourrait être qu'une de vos touches de modification est bloquée? Peut-être ALT, CTRL ou SUPER?

22
Shahbaz

Pour ceux qui viennent de l'osx (mac) essayez de changer les shells en bash

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

puis collez

/bin/bash

12
KhaledMohamedP