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).
Simplemente inserte unbufferantes 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 unbufferhaciendo.
Esto hace que el archivo resultante contenga códigos de color (por supuesto); ¿Hay alguna manera de imprimir el archivo de una manera que utilice los códigos de color y muestre correctamente los colores en el terminal?
Kyle Strand
2
¡Uf, eso hace que las entradas de contraseña muestren su contraseña en texto sin cifrar!
AndiDog
@Tgr Esa solución no funcionó para mí en OS X tratando de obtener la salida de color sin procesar de xcodebuild- en cambio obtuve líneas cortadas sin color. unbuffer xcodebuild | less -RSin embargo, funcionó a la perfección.
Slipp D. Thompson
2
No necesitas el expect-devpaquete. expectes suficiente.
Yajo
11
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).
OKAY. Eso lo explica. Pero, ¿puedo ver de alguna manera los colores en la pantalla? (Es un TTY después de todo). No me importa NO tenerlos en el archivo de registro, pero seguramente los quiero en mi pantalla.
Paweł Gościcki
Creo que no me hice lo suficientemente claro. ls -lfue 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.
Paweł Gościcki
1
@Pawel, no puede arreglarlo fácilmente en tee / pipe ya que tee / pipe no elimina estos códigos de color. El problema es que el comando inicial ve que no está escribiendo en la terminal. Necesita un pseudo-terminal que actúe como una tubería pero que los comandos vean como un terminal.
RedGrittyBrick
Hm ... bastante justo. Supongo que solo necesito aceptar que así es.
Paweł Gościcki
3
@ PawełGościcki esta respuesta solo soluciona el problema ls. Vea mi respuesta que soluciona el problema para todos los programas, incluidos los registros de heroku.
Eamonn O'Brien-Strain
3
Expandiré la scriptsolución dada en el comentario de la respuesta aceptada. El uso scriptpuede ser útil en caso de que no pueda o no quiera instalar el paquete de esperar que contiene el unbuffercomando.
Imprima lals 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).
Respuestas:
Simplemente inserte
unbufferantes 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 dels.Por ejemplo
Si aún no lo tiene instalado, en Ubuntu y otras distribuciones de Debian-ish Linux puede instalarlo
unbufferhaciendo.fuente
xcodebuild- en cambio obtuve líneas cortadas sin color.unbuffer xcodebuild | less -RSin embargo, funcionó a la perfección.expect-devpaquete.expectes suficiente.Use la opción ls
--color=always--color=autono dará color a la salida de una tubería, por razones obvias.La página principal dice lo siguiente:
fuente
ls -lfue solo un ejemplo. Tengo un comando completamente diferente (registros de heroku) que elimina los colores cuando se canalizatee. 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
scriptsolución dada en el comentario de la respuesta aceptada. El usoscriptpuede ser útil en caso de que no pueda o no quiera instalar el paquete de esperar que contiene elunbuffercomando.Imprima la
lssalida en stdout y archive con códigos de color :donde (
man script):Ver el archivo de salida con colores:
fuente
-ees lo mismo que--returnno hay necesidad de ambos;-efqes--return --flush --quiet.