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
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 dels
.Por ejemplo
Si aún no lo tiene instalado, en Ubuntu y otras distribuciones de Debian-ish Linux puede instalarlo
unbuffer
haciendo.fuente
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:
fuente
ls -l
fue 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
script
solución dada en el comentario de la respuesta aceptada. El usoscript
puede ser útil en caso de que no pueda o no quiera instalar el paquete de esperar que contiene elunbuffer
comando.Imprima la
ls
salida en stdout y archive con códigos de color :donde (
man script
):Ver el archivo de salida con colores:
fuente
-e
es lo mismo que--return
no hay necesidad de ambos;-efq
es--return --flush --quiet
.