En Git Bash en Windows 7, los colors se muestran como código al ejecutar Cucumber o rspec

En Git Bash en Windows 7, de vez en cuando ocurre algo que hace que la encoding de color falle cuando se ejecutan escenarios de pepino o especificaciones de rspec.

Ocasionalmente, se fija aleatoriamente (donde random == No sé lo que hice para que se solucione).

Entonces cuando corro:

$ bundle exec cucumber features 

O

 $ bundle exec rspec spec 

en lugar de ver esto en color:

  ...... 3 scenarios (3 passed) 6 steps (6 passed) 

Veo algo como:

  [32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m 3 scenarios ([32m3 passed[0m) 6 steps ([32m6 passed[0m) 

Sé que estas son las representaciones de código de los colors, pero no sé por qué deja de mostrar los colors ni sé cómo solucionarlo. ¿Qué me estoy perdiendo?


Salida de la configuration de git –list:

 core.symlinks=false core.autocrlf=true color.diff=auto pack.packsizelimit=2g help.format=html http.sslcainfo=/bin/curl-ca-bundle.crt sendemail.smtpserver=/bin/msmtp.exe user.name=John Uhri user.email= ***** color.branch=auto color.diff=auto color.interactive=auto color.status=auto core.repositoryformatversion=0 core.filemode=false core.bare=false core.logallrefupdates=true core.symlinks=false core.ignorecase=true core.hidedotfiles=dotGitOnly remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* branch.master.remote=origin branch.master.merge=refs/heads/master 

En Windows, git Bash usa el terminal incorporado que se despliega en el indicador de cmd. Si instala cygwin puede usar el emulador de terminal mintty (instalado en el menu de inicio como "Cygwin Terminal").

¿Porque es esto importante? Porque el término del indicador de Windows cmd no interpreta secuencias de escape ANSI . Utiliza el esquema de control de color M $ en su lugar. Si el progtwig que está utilizando no cambia a este esquema en Windows o pasa por un filter, verá los caracteres de escape sin formatting. La console mintty de Cygwin tiene soporte completo para estos códigos.

Si los colors generalmente funcionan, esto es un error en pepino / rspec de porting. Alguien perdió un cheque por las windows al imprimir los colors o algo así. Hasta que esto se solucione, una solución alternativa es el siguiente script de Python:

 #!/usr/bin/env python # Filter ANSI escapes from stdin to stdout from __future__ import print_function from colotwig import init import sys init() for line in sys.stdin.readlines(): print(line) 

Necesitará instalar la biblioteca de colotwig para esto. Luego solo canaliza tu salida a través del script:

 $ bundle exec rspec spec | colorFilter.py 

Después de varios bashs infructuosos de get algunos colors en mis terminales de Windows 7 bash (msysgit con console2), tropecé con el blog de Jason Karns 'ANSI color in Windows Shells' .

Todo lo que tenía que hacer era descomprimir ansicon.exe en una carpeta permanente y ejecutarlo a través de cmd en esa carpeta:

 ansicon.exe -i 

Todos los loggings bash ahora tienen colors en lugar de [32m o [0m tags, woo!

Utilizo el proyecto "wac" de @aslakhellesoy. Es un poco molesto porque tienes que recordar canalizar tus commands a través de él. Pero es lo único que he visto funcionar.

https://github.com/aslakhellesoy/wac

Intenta instalar la gem win32console.

 gem install win32console 

He tenido el mismo pb, parece que si desarma la variable de entorno TERM funciona de nuevo.

Lo arreglé con Git para Windows (V2.5.3) ejecutando Git dentro de PowerShell (en la console normal de Windows) estableciendo tres variables de entorno:

  1. TERM=msys
  2. PAGER='"C:\Program Files\Git\usr\bin\less.exe"' (tenga en count que las comillas dobles deben ser parte del valor).
  3. Incluyendo --RAW-CONTROL-CHARS en LESS valor de s (por lo que con mis otras preferences: --LONG-PROMPT --no-init --quit-if-one-screen --RAW-CONTROL-CHARS ).

Las sugerencias de Richard, incluso en cmd.exe (no en PowerShell), funcionaron para mí.

Estoy ejecutando: Windows 7 (64-bit) and Git-Bash: GNU bash, version 3.1.23(6)-release (i686-pc-msys)

Tuve que cambiar la location PAGER para que coincida con mi sistema.

 export PAGER='"C:\Program Files (x86)\Git\bin\less.exe"'