Estoy buscando un programa para copiar stdin a stdout mientras muestro caracteres de control (como cat -v
) y sin esperar un EOF (la entrada es de a tail -f
). Tengo GNU|Linux; el cat
que está instalado ignora la -u
bandera.
Respuesta1
GNU cat
ignora -u
porque su salida essiempre sin búfer. Entonces, cuando solicitas una salida sin búfer con -u
, la obtienes (pero también la obtienes incluso cuando no la solicitas).
GNU tail
tiene el mismo comportamiento, siempre sin búfer.
Para probar esto, en un caparazón hice:
while :; do echo -ne "hello\t"; sleep 1;done > testtail
que añade la palabra "hola" seguida de una tabulación, cada segundo (sin nuevas líneas)
En otro shell lo hice ( cat -T
es similar a cat -v
: muestra pestañas como ^I):
tail -f testtail | cat -T
lo que me da:
hello^Ihello^Ihello^Ihello^I ...
actualizado cada segundo.
Respuesta2
cat
La opción de BSD -u
deshabilitó el almacenamiento en búfer de salida. De man cat
:
-u Disable output buffering.