User Tools

Site Tools


mantener_la_salida_coloreada_al_utilizar_tuberias

Mostrar salidas de comandos coloreadas cuando se utilizan tuberías (Piping) en la shell

Los comandos en entornos UNIX omiten su salida coloreada cuando el destino no es la propia terminal sobre la que se están ejecutando, por eso, al utilizar una tubería con “more” o “less”, esta no muestra un resultado coloreado.

Para que la salida coloreada de un comando se mantenga al usar tuberías, es necesario que el comando que envía su salida estándar a otro comando permita mantener ese formato de salida. Algunos comandos incluyen la opción “--color”, la cual mediante el parámetro “always” permite preservar en su salida los códigos de colores.

Al otro lado de la tubería debe existir un comando que permite interpretar dichos códigos de color, eso dependerá del comando utilizado. Veamos unos ejemplos prácticos con las herramientas “more” / “less” y “grep”.

# Muestra colores (less -r).
dmesg --color=always | less -r
 
# No muestra colores y por tanto se visualizarán los códigos de color.
dmesg --color=always | less
ESC[32m[    0.000000] ESC[0mESC[33mx86/fpuESC[0m: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
ESC[32m[    0.000000] ESC[0mESC[33mx86/fpuESC[0m: Using 'eager' FPU context switches.
ESC[32m[    0.000000] ESC[0mESC[33me820ESC[0m: BIOS-provided physical RAM map:
ESC[32m[    0.000000] ESC[0mESC[33mBIOS-e820ESC[0m: [mem 0x0000000000000000-0x000000000009d7ff] usable
 
# Muestra colores (more no requiere de ninguna opción especial).
dmesg --color=always | more
 
# Múltiples colores en grep: muestra las cadena "sda" en rojo (por defecto) y "logical blocks" en azul.
dmesg | grep -i --color=always sda | GREP_COLOR='01;36' grep -i --color=always "logical blocks"

Algunos comandos, como ls también implementan la opción “–color” con tres posibles variantes, “always” (por defecto si no se especifica nada), “auto” y “never”. La opción “auto” suele ser la más utilizada al definir alias.

alias ls='ls --color=auto'

Esto es debido a que “auto” únicamente utiliza códigos de colores si la salida NO se va a pasar por una tubería a otro comando, permitiendo que se reciban los datos correctamente. Si no se utiliza la opción “auto”, este sería el resultado de combinar “ls” con el comando “less”.

ls | less
ESC[01;36mDescargasESC[0m
ESC[01;34mDesktopESC[0m
ESC[01;34mDownloadsESC[0m
ESC[01;34mDumpzillaESC[0m
mantener_la_salida_coloreada_al_utilizar_tuberias.txt · Last modified: 2020/12/25 22:57 by 127.0.0.1