Cuando intento imprimir un texto en color usando secuencias de escape ANSI a través del echocomando incorporado , parece que la \esecuencia de escape en la cadena que proporciono se interpreta literalmente en lugar de como el "escape" que se supone que representa. Esto solo sucede en Snow Leopard: los ejemplos a continuación funcionan según lo previsto en Leopard.
Aparentemente echoes compatible con el -einterruptor, ya que se interpreta correctamente \nal usarlo:
~ $
~ $ echo "\n"
\n
~ $ echo -e "\n"
~ $
Pero cuando trato de usar \e, obtengo esto:
~ $ echo -e "\e[34mCOLORS"
\e[34mCOLORS
~ $
Como dije, en Leopard, lo anterior me daría el hilo "COLORES" en color.
¿Alguien sabe de una razón por la que esto podría ser un cambio previsto? ¿Qué tal una solución alternativa para imprimir secuencias de escape ANSI de scripts Bash en Snow Leopard?
La versión de shell Bash en mi máquina Leopard es 3.2.17(1)-releasey 3.2.48(1)-releaseen mi máquina Snow Leopard.
fuente

Respuestas:
No puedo decirte por qué no admite ese argumento (es posible que tengas que preguntarle a los programadores sobre eso). Solo sé que en mi caja de Linux, obtengo esto:
\eescapes/bin/echode gnu coreutils. A medida que Apple cambia la fuente de sus componentes del sistema Unix de vez en cuando (por ejemplo, pasar de zsh a bash), verifique si hubo un cambio/bin/echoentre Leopard y Snow Leopard. Si es gnu, puede preguntar a las personas en gnu.org por qué eligen no incluir esas secuencias.En cuanto a las soluciones (eso es más interesante): no se usa
/bin/echo, pero bash incorporadoechofunciona en cajas de Linux. Si cambiaron a bash sin eco incorporado (o algo aún más oscuro), también podría probar esta característica no muy conocida de su shell (funciona al menos en bash y zsh):Esta es la parte correspondiente de la página de manual de bash:
fuente
$'string'secuencia de escape habilitada, gracias.\eno es parte del estándar POSIX; la implementación de GNU coreutils extendida en el estándar. OS X no lo hizo.Intenta en
\x1Blugar de\e.fuente
\x1Ben lugar de\efunciona, gracias.1Bes el valor hexadecimal del personaje Escape .¿
\033Aún funciona? Si no, puede presionar Ctrl + V seguido de la tecla Escape (si un mac tiene esas teclas) para crear un carácter de control real dentro de la línea de comando (que no funciona tan bien en los scripts, por supuesto, dependiendo del editor)fuente
\033en lugar de\efunciona, gracias.33es el valor octal del carácter Escape .033sería una forma estandarizada de escribir octal.Otra forma de imprimir secuencias de escape ANSI en el shell es mediante el uso
/usr/bin/printf.fuente
Para complementar la útil respuesta existente con alguna información de fondo :
Si eres invocación
echopor nombre solamente - en lugar de con su ruta,/bin/echo- que está invocando el Bash incorporado en lugar de la utilidad externa.El comportamiento de los elementos nativos de Bash, como los incorporados, generalmente es portátil en un sentido de Bash, lo que significa que deberían funcionar igual en cualquier plataforma capaz de ejecutar Bash .
\ees una curiosa excepción que afecta a las versiones 3.x Bash en macOS (hasta el día de hoy, a partir de v10.13.5 (High Sierra), macOS viene con versiones desactualizadas 3.x de Bash, por razones legales).\e(y su alias\E) deberían funcionar conecho -e;\eSe agregó soporte a la versiónechointegrada en Bash 2.0 . , pero inexplicablemente no lo hace en la versión 3.x en macOS.\ehace el trabajo en 3.x versiones Bash en otras plataformas, como MSYS en Windows.Por el contrario, si se instala y utiliza un 4.x Bash en MacOS,
\ehace el trabajo.fuente
Pueden tratar de cumplir con POSIX: http://www.opengroup.org/onlinepubs/9699919799/
OPCIONES de parte establece entre otras cosas:
fuente
-e.Para su información, estamos a punto de agregar \ e soporte a / bin / echo y / usr / bin / printf en coreutils. Tenga en cuenta que los estándares C no especifican \ e, pero gcc, perl, bash, ksh y tcsh lo admiten
fuente
Puede verificar si ,, caracteres de escape que no son ascii '' no han sido marcados en el menú de opciones de visualización de la terminal.app.
fuente