full - Pretende ser un tty en bash para cualquier comando
upgrade to full tty (1)
Esta pregunta ya tiene una respuesta aquí:
Cada vez que uso grep
, y lo canalizo a otro programa, la opción --color
no se respeta. Sé que podría usar --color=always
, pero también aparece con otros comandos que me gustaría obtener la salida exacta de ese comando como la salida que obtendría si estuviera en un tty.
Así que mi pregunta es, ¿es posible engañar a un comando para que piense que el comando se ejecuta dentro de un tty?
Por ejemplo, corriendo
grep --color word file # Outputs some colors
grep --color word file | cat # Doesn''t output any colors
Me gustaría poder escribir algo como:
IS_TTY=TRUE grep --color word file | cat # Outputs some colors
Esta pregunta parece tener una herramienta que podría hacer lo que quiero: vaciar: ejecutar procesos y aplicaciones bajo pseudo-terminal (PTY) , pero por lo que pude leer en los documentos, no estoy seguro de que pueda ayudar a resolver mi problema.
Hay una serie de opciones, como se describe en otras respuestas de desbordamiento de pila (ver el comentario de Caaarlos ). Los resumiré aquí sin embargo:
Use
script
+printf
, no requiere dependencias adicionales:0<&- script -qfce "ls --color=auto" /dev/null | cat
O haz una función bash
faketty
para encapsularla:faketty () { script -qfce "$(printf "%q " "$@")" } faketty ls --color=auto | cat
O en la cáscara de pescado:
function faketty script -qfce "(printf "%q " "$argv")" end faketty ls --color=auto | cat
(el crédito va a esta answer )
Use el comando
unbuffer
(como parte del conjunto de comandosexpect
), desafortunadamente esto requiere una instalación de más de 50 mb, pero es la solución más sencilla:sudo apt-get install expect-dev unbuffer -p ls --color=auto | cat
O si usas la cáscara de pescado:
function faketty unbuffer -p $argv end faketty ls --color=auto | cat
Este es un excelente artículo sobre cómo funcionan los TTY y sobre qué son los Pseudo-TTY (PTY); vale la pena echarle un vistazo si desea comprender cómo funciona el shell de Linux con los descriptores de archivos para pasar la entrada, la salida y las señales. http://www.linusakesson.net/programming/tty/index.php