Hay dos problemas aquí:
- Comandos como
ls
—que detectan automáticamente el soporte de color— no encuentran soporte de tuberías
less
está configurado para mostrar solo los códigos de color de forma predeterminada.
Ambos se pueden superar, pero es un poco torpe:
ls --color=always | less -R
Esto no es ls
específico. Muchos comandos que admiten color también tienen un argumento de anulación.
Una respuesta un poco más profunda ls
es comprobar si su STDOUT pertenece o no a un terminal real o no. Cuando se canalizan las cosas, el STDOUT se establece en el STDIN del siguiente comando.
Puede ver esto en el trabajo en el ls
código fuente . Está utilizando el isatty
comando (una interfaz POSIX central) para determinar cuál es la situación:
Los colores están activados por defecto:
print_with_color = (i == color_always
|| (i == color_if_tty
&& isatty (STDOUT_FILENO)));
¿Intentamos generar en varias columnas:
if (format == long_format)
format = (isatty (STDOUT_FILENO) ? many_per_line : one_per_line);
//...
if (isatty (STDOUT_FILENO))
{
format = many_per_line;
set_quoting_style (NULL, shell_escape_quoting_style);
qmark_funny_chars = true;
}
else
{
format = one_per_line;
qmark_funny_chars = false;
}
grep
hace algo muy similar, a menos que se anule explícitamente, detectará el soporte de color, con isatty
:
color_option = isatty (STDOUT_FILENO) && should_colorize ();
grep --color=always "search string" * | less -R
pero tiendo a usarmost
hoy en día en lugar deless
. TAMBIÉN: gnu.org/software/src-highlite es un marcador de color (menos funciona también)