Si uso bash shell cli y ejecuto algún programa que no regresa de inmediato, entonces ingreso algunas letras (básicamente escribo el siguiente comando antes de notar que el anterior no terminó) y la entrada siempre se ve así (especialmente cuando se usa teclas de flecha arriba y abajo :)
]]A^ or ]]B^
Y me pregunto, ¿es este tipo de entrada prematura 'dañino' de todos modos, o qué significa la cadena devuelta?
Respuestas:
Estas cadenas son la representación sin formato de los caracteres especiales que escribió (como inicio, final, flechas, tabulación, etc.).
Su efecto nocivo está controlado por el comando que está ejecutando, si está recibiendo información del terminal, estos caracteres serán parte de su entrada.
Si no recibe información del terminal, no debería tener ningún efecto adverso en ninguno de los sabores de Unix que conozco.
fuente
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[
, yA
).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, cuandobash
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 quebash
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 lareadline
biblioteca para hacer la mayor parte de su entrada.fuente