ls -l --color=auto | tee output.log
Sin tubo / te es de color. ¿Cómo puedo hacerlo para que permanezca coloreado mientras lo uso tee
(solo se puede colorear en la pantalla, no me importan los colores en los registros).
ls -l --color=auto | tee output.log
Sin tubo / te es de color. ¿Cómo puedo hacerlo para que permanezca coloreado mientras lo uso tee
(solo se puede colorear en la pantalla, no me importan los colores en los registros).
Respuestas:
Simplemente inserte unbuffer
antes de cualquier comando para hacer que piense que está escribiendo en una salida interactiva, incluso si realmente está entrando en otro ejecutable. Esto preservará el color en el caso de ls
.
Por ejemplo
unbuffer ls -l --color=auto | tee output.log
Si aún no lo tiene instalado, en Ubuntu y otras distribuciones de Debian-ish Linux puede instalarlo unbuffer
haciendo.
sudo apt-get install expect-dev
xcodebuild
- en cambio obtuve líneas cortadas sin color. unbuffer xcodebuild | less -R
Sin embargo, funcionó a la perfección.
expect-dev
paquete. expect
es suficiente.
Use la opción ls --color=always
--color=auto
no dará color a la salida de una tubería, por razones obvias.
La página principal dice lo siguiente:
Con --color = auto, los códigos de color se emiten solo si la salida estándar está conectada a un terminal (tty).
ls -l
fue solo un ejemplo. Tengo un comando completamente diferente (registros de heroku) que elimina los colores cuando se canaliza tee
. Y quiero "arreglar / cambiar" tee / pipe, no el comando que estoy ejecutando.
ls
. Vea mi respuesta que soluciona el problema para todos los programas, incluidos los registros de heroku.
Expandiré la script
solución dada en el comentario de la respuesta aceptada. El uso script
puede ser útil en caso de que no pueda o no quiera instalar el paquete de esperar que contiene el unbuffer
comando.
Imprima la ls
salida en stdout y archive con códigos de color :
script -efq output.log -c "ls -l --color=auto"
donde ( man script
):
-e, --return Return the exit code of the child process. Uses the same format as bash termination on signal termination exit code is 128+n. -f, --flush Flush output after each write. This is nice for telecooperation: one person does `mkfifo foo; script -f foo', and another can supervise real-time what is being done using `cat foo'. -q, --quiet Be quiet (do not write start and done messages to either standard output or the typescript file).
Ver el archivo de salida con colores:
less -r output.log
-e
es lo mismo que --return
no hay necesidad de ambos; -efq
es --return --flush --quiet
.