unbuffer
Sometimes I run some_program | grep blah
, but libc buffers the output because
the program isn’t writing to a terminal (in libc, writing to a terminal is
line-buffered but writing to a pipe/file isn’t). So the grep doesn’t work. It’s
annoying and I’ve never known what to do about it.
I finally found a solution to this thanks to folks on Mastodon: unbuffer
from the expect package. unbuffer program
will open a new TTY, set the program’s stdout to that tty, and then write to the pipe itself and flush the output.
You can also use unbuffer
to trick the program into thinking it’s writing to a TTY for some other reason.