Me he encontrado con secuencias de bash como \033[999D
y \033[2K\r
que 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,
\033
es el código octal de estilo C para un personaje de escape. La[999D
mueve el cursor hacia atrás 999 columnas, presumiblemente una forma de fuerza bruta de llegar al inicio de la línea.[2K
borra la línea actual.\r
es 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 bibliotecastermcap
y seterminfo
utilizan para escribir código compatible con múltiples terminales. Eltput
comando es una interfaz para laterminfo
biblioteca (termcap
tambié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.
terminfo
ytermcap
siguen 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
xterm
preguntas frecuentes proporcionan información interesante sobre las diferencias entre los emuladores de terminal modernos (muchos solo intentan emularsexterm
) y cómo lasxterm
secuencias se relacionan con los terminales VT100 mencionados en el enlace anterior. También proporciona una lista definitiva dexterm
secuencias 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
tput
lugar, 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 comandostput
es 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 establecerloxterm
en un modo que no los acepte. Voy a actualizar con más información sobre esto, creo.TERM=xterm
pero no implementan todo lo quexterm
hace.El
\033
es 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[999D
sería una copia de seguridad de las líneas anteriores. Sin embargo, puede ser el resultado de una codificación dudosa;) También puedebash
interpretar 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