Me he encontrado con secuencias de bash como \033[999Dy \033[2K\rque se utilizan para hacer alguna manipulación en una impresión en un terminal. Pero, ¿qué significan estas secuencias? ¿Dónde puedo encontrar una lista / resumen en la web para ayudarme a descubrir el significado de estas secuencias?
                19
            
  
            
Respuestas:
Ver este enlace http://www.termsys.demon.co.uk/vtansi.htm . Como dice Anthon,
\033es el código octal de estilo C para un personaje de escape. La[999Dmueve el cursor hacia atrás 999 columnas, presumiblemente una forma de fuerza bruta de llegar al inicio de la línea.[2Kborra la línea actual.\res un retorno de carro que moverá el cursor al inicio de la línea actual y es una secuencia de escape de estilo C en lugar de una secuencia de control de terminal.Actualizar
Como han señalado otras personas, estas secuencias de control no son nada que hacer
bash, sino el dispositivo terminal / emulador en el que aparece el texto. Érase una vez que era común que estas secuencias fueran interpretadas por una pieza de hardware completamente diferente. Originalmente, cada uno respondería a conjuntos de códigos completamente diferentes. Para lidiar con esto, las bibliotecastermcapy seterminfoutilizan para escribir código compatible con múltiples terminales. Eltputcomando es una interfaz para laterminfobiblioteca (termcaptambién se puede compilar el soporte) y es una forma más sólida de crear secuencias compatibles.Dicho esto, también existe el estándar ANSI X3.64 o ECMA-48 . Cualquier implementación de terminal moderna usará esto.
terminfoytermcapsiguen siendo relevantes ya que la implementación puede estar incompleta o incluir extensiones no estándar, sin embargo, para la mayoría de los propósitos, es seguro asumir que las secuencias ANSI comunes funcionarán.Las
xtermpreguntas frecuentes proporcionan información interesante sobre las diferencias entre los emuladores de terminal modernos (muchos solo intentan emularsexterm) y cómo lasxtermsecuencias se relacionan con los terminales VT100 mencionados en el enlace anterior. También proporciona una lista definitiva dextermsecuencias de control .Por supuesto, también se usa comúnmente la consola Linux, en la que se puede encontrar una lista definitiva de secuencias de control
man console_codes, junto con una comparación conxterm.fuente
tputlugar, puede usar comandos para tener más portabilidad, iirc (pero a expensas de una menor cobertura de los detalles de su terminal). VT100 (del que habla la página) es compatible con muchos (pero no todo es compatible, creo ...). Pero su variable TERM puede estar configurada en algún otro terminal, y esto podría afectar los efectos de algunos de los comandostputes una forma más robusta. Pero es la compatibilidad ANSI en lugar del terminal VT100 específico lo que ahora es bastante ubicuo, aunque imagino que es posible establecerloxtermen un modo que no los acepte. Voy a actualizar con más información sobre esto, creo.TERM=xtermpero no implementan todo lo quextermhace.El
\033es el carácter de escape, y esas secuencias no son específicas de bash sino que son interpretadas por el terminal (software o hardware (a través de la red o línea serial)) en el que se ejecuta el programa (bash). Hay muchas secuencias de este tipo .Lo que cada uno hace depende del terminal del que depende y también puede depender de cualquier secuencia previa que altere el estado del terminal.
A menudo se usan para establecer colores en el indicador de bash , pero no encontré sus ejemplos particulares en esa página.
fuente
'\ 033 [999D' es gracioso. Algunos terminales implementan menos secuencias de escape, por lo que esto podría ser necesario si ninguno de '\ 033 [1G', '\ 033 [1; 1H', '\ 033 [1; 1f' o '\ r' se comportan como ellos debería, pero ¿quién usa una pantalla de texto de mil columnas? Estas secuencias tienen una página de manual en Linux: console_codes (4) . bjh21 tiene una lista detallada de todos los códigos . Dependiendo de qué programa analiza '\ 033', la sustitución más clara '\ e' podría estar disponible.
Realmente no se pretende que se usen directamente, la forma correcta de emitir comandos de control de terminal es con una capa de abstracción como ncurses, pero funcionan igual de bien desde los literales de cadena.
fuente
\033[999Dsería una copia de seguridad de las líneas anteriores. Sin embargo, puede ser el resultado de una codificación dudosa;) También puedebashinterpretar los códigos de escape directamente, por ejemplo$'\033[999D'puede buscar "033 term escape list" o " 033 tput " y ver http://wiki.bash-hackers.org/scripting/terminalcodes para obtener más información antes de que alguien responda;]
fuente