Algunas teclas de su teclado no corresponden a caracteres reales. Por ejemplo, Acorresponde al carácter a
pero las teclas Upy F1no tienen sus propios caracteres dedicados. Cuando se presionan esas teclas especiales, en lugar de obtener un solo carácter correspondiente a la tecla, el terminal traduce la pulsación de la tecla a una secuencia especial de varios caracteres que generalmente comienzan con el carácter de escape (generalmente se muestra como ^[
). Por ejemplo, Upgeneralmente genera la secuencia ^[[A
(es decir, 3 caracteres de una tecla: escape [
, y A
).
La razón por la que normalmente no se ve ^[[A
es porque la mayoría de las aplicaciones de consola son lo suficientemente inteligentes como para traducir las secuencias especiales en comandos útiles en lugar de simplemente repetirlas en la consola. Para hacer esto, apagan el eco incorporado del terminal y realizan su propio procesamiento de nivel inferior. Por ejemplo, cuando bash
ve ^[[A
, ¹ se da cuenta de que significa que presionó Upy no hizo eco^[[A
, hace un montón de cosas para eliminar todo lo que ha escrito hasta ahora, recuperar el comando anterior guardado en el historial e imprimirlo en su lugar.
Si ves ^[[A
cuando presionasUp , eso generalmente significa que el eco del terminal está activado y el proceso en primer plano (el que controla el terminal) no está realizando ninguno de los procesos especiales mencionados anteriormente. Esto puede deberse a que la aplicación simplemente ignora el terminal (como la mayoría de los comandos no interactivos). Tenga en cuenta que, por lo general, el shell pone el terminal en modo canónico y activa el eco antes de ejecutar un proceso en primer plano, y restaura sus propios ajustes una vez que recupera el control del terminal después de que el comando sale.
El eco parece bastante inofensivo. Solo recuerde que si el comando en ejecución no lee desde la terminal, los caracteres que generó a través del teclado probablemente terminarán en bash
la cola de entrada, así que tenga cuidado con lo que escribe, ya que probablemente se interpretarán como comandos normales una vez que bash
reanude la lectura desde la terminal
¹ Esto es en realidad una simplificación excesiva. Dado que la secuencia específica puede variar según el tipo de terminal, generalmente hay varias capas de bibliotecas de abstracción entre una aplicación de consola y el terminal en sí. Por ejemplo, bash
usa la readline
biblioteca para hacer la mayor parte de su entrada.