GNU/Linux >> Tutoriales Linux >  >> Linux

¿Adónde van los códigos de escape ANSI cuando conecto la tubería a otro proceso? ¿Puedo mantenerlos?

En algún momento quiero canalizar la salida codificada por colores para un proceso, por ejemplo. grep... pero cuando lo canalizo a otro proceso, p. sed, los códigos de color se pierden…

¿Hay alguna forma de mantener estos códigos intactos?

Aquí hay un ejemplo que pierde la salida coloreada:

echo barney | grep barney | sed -n 1,$\ p   

Respuesta aceptada:

Muchos programas que generan salidas en color detectan si están escribiendo en un TTY y apagan los colores si no es así. Esto se debe a que los códigos de color son molestos cuando solo desea capturar el texto, por lo que intentan "hacer lo correcto" automáticamente.

La forma más sencilla de capturar la salida de color de un programa como ese es decirle que escriba color aunque no esté conectado a un TTY. Tendrás que leer la documentación del programa para saber si tiene esa opción. (por ejemplo, grep tiene el --color=always opción.)

También podría usar el expect secuencia de comandos unbuffer para crear un pseudo-tty como este:

echo barney | unbuffer grep barney | sed -n 1,$\ p

Linux
  1. ¿Cómo ver la salida de un proceso en ejecución en otra sesión de Bash?

  2. ¿La salida de sustitución del proceso está fuera de orden?

  3. ¿Por qué puedo ver la salida de los procesos en segundo plano?

  4. ¿Cómo canalizo o redirijo la salida de curl -v?

  5. Encuentra qué proceso está en el otro extremo de una tubería

¿Cómo puedo saber la ruta absoluta de un proceso en ejecución?

¿Terminal que admite el código de escape en cursiva ANSI?

¿Qué hacer cuando Ctrl + C no puede matar un proceso?

¿Cómo analizo la salida del comando de búsqueda cuando los nombres de archivo tienen espacios en ellos?

¿Cómo puede parecer que un proceso tiene un nombre diferente en la salida de ps?

¿Puede el proceso de inicio ser un script de shell en Linux?