Waarom toont de terminal “^[[A” “^[[B” “^[[C” “^[[D”] wanneer u op de pijltjestoetsen drukt in Ubuntu?

Ik heb eerst een klein programma in Ansi C op Windows geschreven en ik heb het nu gecompileerd op Ubuntu met de ingebouwde GCC.

Het programma is eenvoudig:

  • lees de regel van de console met scanf().
  • Analyseer de string en bereken.

Maar er gebeurt iets raars. Als ik de cursor probeer te verplaatsen, worden er vier tekens afgedrukt:

  • door op Omhoogte drukken, wordt “^[[A“) afgedrukt
  • door op Dnte drukken, wordt “^[[B“) afgedrukt
  • door op Rtte drukken, wordt “^[[C“) afgedrukt
  • door op Ltte drukken, wordt “^[[D“) afgedrukt

  • Hoe kan dit worden vermeden?

  • Waarom worden deze 4 tekens afgedrukt in plaats van de cursor te verplaatsen?


Antwoord 1, autoriteit 100%

Omdat dat is wat het toetsenbord daadwerkelijk naar de pc verzendt (meer precies, wat de terminal afdrukt voor wat het daadwerkelijk van het toetsenbord ontvangt). bashbijvoorbeeld haalt die waarden op, ontcijfert ze en begrijpt dat je wilt bewegen, dus het zal ofwel de cursor verplaatsen (in het geval van links/rechts) of zijn geschiedenis gebruiken om eerdere commando’s op te halen (omhoog /omlaag). Je kunt dus niet verwachten dat je programma op magische wijze pijltoetsen ondersteunt.

Echterhet lezen van standaardinvoer vanaf de terminal ondersteunt al de pijltoetsen links/rechts (ik geloof, maar ik ben momenteel niet in Linux om te testen en zeker te zijn). Dus mijn gok is dat er een ander probleem is dat interfereert. Een mogelijke oorzaak kan zijn dat een van je modificatietoetsen vastzit? Misschien ALT, CTRL of SUPER?


Antwoord 2, autoriteit 64%

Voor degenen die van de osx (mac) komen, probeer de shells te veranderen in bash

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

plak dan

/bin/bash


Antwoord 3, autoriteit 39%

Dit kan zijn omdat het gebruikersaccount in shell is gemaakt. Je kunt het op twee manieren veranderen in bash.

Permamentoplossing is –

sudo chsh -s /bin/bash ${username}

Om deze oplossing te laten werken, moet u uitloggen en inloggen

Tijdelijke oplossing is elke keer wanneer u inlogt op de ubuntu-server, typ bashen druk op Return.


Antwoord 4

Op MacOS Terminal was het voor mij voldoende om “Scroll alternatief scherm” uit te schakelen om het probleem te laten verdwijnen. Zie screenshot van de voorkeuren hieronder.


Antwoord 5

Ik denk dat de simpele manier is dat we het gewoon kunnen doen
kill %%
omdat dit soms gebeurt vanwege achtergrondprocessen.

Other episodes