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 lsespecífico. Muchos comandos que admiten color también tienen un argumento de anulación.
Una respuesta un poco más profunda lses 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 lscódigo fuente . Está utilizando el isattycomando (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;
}
grephace 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 -Rpero tiendo a usarmosthoy en día en lugar deless. TAMBIÉN: gnu.org/software/src-highlite es un marcador de color (menos funciona también)