2012-04-10 11 views
5

he encontrado recientemente un post que dio una solución para tener la salida de texto por stderr un color diferente para Linux (bash)Cambiar el color del texto de salida en las ventanas para stderr

crearon el guión siguiente secuencia de comandos de bash

#!/bin/bash 
{ $* 2>&1>&3|sed 's,.*,\x1B[33m&\x1B[0m,'>&2;} 3>&1 

esto hace que la salida imprima texto amarillo cuando es de stderr. stdout aún imprime el mismo color.

la secuencia de comandos se guardó en un directorio en $ PATH llamado color. Esto me permite ejecutar la secuencia de comandos con make o scons y hojeará todo el texto de stderr en amarillo. (Podría hacer que el texto fuera rojo cambiando 33m a 31m)

color make CPU=x64 

Esto es bastante útil para encontrar errores al compilar.

¿Hay una secuencia de comandos similar que se podría utilizar para Windows cmd shell?

Nota: He instalado sed en mi computadora con Windows si eso es útil.

Respuesta

6

En cuanto a la compatibilidad con los códigos de escape ANSI en cmd.exe de Windows, consulte ansicon. Después de la traducción de su lógica de redirección a la sintaxis cmd.exe preparé la color.bat siguiente archivo:

@Echo Off 
(((%* 1>&3) 2>&1) | "c:\Program Files (x86)\GnuWin32\bin\sed.exe" "s,.*,\x1B[33m&\x1B[0m," 1>&2) 3>&1 

Desafortunadamente las corrientes se mezclan (en algunas líneas de los personajes de stdout y stderr se mezclan en una sola línea). Tal vez este comportamiento dependa de la versión de sed.exe utilizada, así que pruébalo.

Si esto no funciona, considere usar una instalación mínima de cygwin. Probé tu script color.sh y pude iniciar un archivo .bat y funcionó correctamente sin mezclar transmisiones. La sintaxis que utilicé fue:

./color.sh cmd /c test.bat 
+0

gracias no estoy en mi equipo en este momento, pero voy a darle un intento y dejarte saber. – gnash117

+0

Gracias funciona bien ya que he sed en mi RUTA No tuve que especificar la ruta completa dejando @Echo Off (((% * 1> & 3) 2> & 1) | "sed.exe" "s,. *, \ x1B [31m & \ x1B [0m, "1> & 2) 3> & 1 – gnash117

3

I ideado un método para obtener una solución equivalente mediante comandos por lotes puros, es decir no ANSI, no sed.exe, etc., simplemente se utiliza findstr:

any_command 2>&1 1>&3 | findstr /N /A:4E "^" 

En este caso, el color diferente no se da a las líneas enteras de stderr, sino solo a un número de línea proporcionado por findstr que, sin embargo, debería ser suficiente para los requisitos establecidos. Escribiré pronto un pequeño programa auxiliar .exe que mostrará líneas de stderr completas en otro color.

+0

¿Qué es' & 3'? –

+0

En mi Win7, este comando colorea las líneas, pero * solo * escribe stderr, stdout no se muestra. –

2

@MBu, @ gnash117

Retitulé color a co desde COLOR es un comando de Windows y lo extendió a:

:: color output - Displays stderr output in different color 
:: 
:: Credits to MBu and gnash117 at http://stackoverflow.com/questions/10095886/change-text-output-color-on-windows-for-stderr#10118710 
:: 
:: Requires: 
:: - http://sourceforge.net/projects/mingw/files/MSYS/ 
:: - http://adoxa.altervista.org/ansicon/ 
:: - http://www.autohotkey.com/ 
:: 
@echo off 

if "%1"=="" goto :Help 

:: 1;31 ... intense red foreground (see https://github.com/adoxa/ansicon/blob/master/sequences.txt for more colors) 
:: \x07 ... BEL, but doesn't work :-(
(((%* 1>&3) 2>&1) | sed "s/.*/\x07\x1B[1;31m&\x1B[0m/" 1>&2) 3>&1 
goto :EOF 

:Help 
setlocal 
::------------------------------------------------ 
:: Adapt these in pairs according to your likings 
set invokeKeys=[Shift]+[Enter] 
set invokeHotkeys=+Enter 
set invokeAfterRemoveKeys=[Alt]+[Enter] 
set invokeAfterRemoveHotkeys=!Enter 
set removeKeys=[Alt]+[c] 
set removeHotkeys=!c 
::----------------------------------------------- 
set invokeText=invokes the entered command after preceding it with '%0 ' 
set invokeAfterRemoveText=invokes the entered command after removing the first three characters from the beginning 
set removeText=removes the first three characters from the command line 
echo Colors a command's stderr output as defined in %~f0 
echo Usage: 
echo - Preceed a command with '%0 ' (e.g.: 'co dir not.existing.file' will show the resulting error message in a different color) 
echo - If the AutoHotkey script below is active: 
echo  - %invokeKeys% ... %invokeText% 
echo  - %invokeAfterRemoveKeys% ... %invokeAfterRemoveText% 
echo  - %removeKeys% ... %removeText% 
echo(
echo  The latter two are useful when using the command line history and having used %invokeKeys% before. 
echo(
echo  Enabled by AutoHotkey script: 
echo(
echo  #IfWinActive ahk_class ConsoleWindowClass 
echo  ; %invokeText% 
echo  %invokeHotkeys%::Send {Home}%0 {Enter} 
echo  ; %invokeAfterRemoveText% 
echo  %invokeAfterRemoveHotkeys%::SendInput {Home}{Del 3}{Enter} 
echo  ; %removeText% 
echo  %removeHotkeys%::SendInput {Home}{Del 3}{End} 
echo  #IfWinActive 
endlocal 
:EOF 
+0

Terminé nombrando el guión hilite (señorita hechizo de resaltado) porque también encontré el problema del color. Realmente me gustó el guión. :) – gnash117

Cuestiones relacionadas