kern/154915: [libc] [patch] Force stdio output streams to line-buffered mode

Oliver Fromme olli at
Thu Feb 16 14:00:31 UTC 2012

The following reply was made to PR kern/154915; it has been noted by GNATS.

From: Oliver Fromme <olli at>
To: bug-followup at, jeremie at
Subject: Re: kern/154915: [libc] [patch] Force stdio output streams to line-buffered mode
Date: Thu, 16 Feb 2012 14:49:50 +0100 (CET)

 I think introducing an environment variable for this purpose
 is a bad hack.  I would advise against this.
 Many tools already have options for unbuffered or line-buffered
 output (for example cat -u), and there are also other ways to
 circumvent such problems.
 For example, the problem quoted in the PR can be solved like this,
 using the -u option of cat:
     $ iostat -x 1 | cat -un | grep ad1
 or avoiding cat completely (also might be more efficient,
 saving one process and one pipe, though I haven't benchmarked
     $ iostat -x 1 | awk '{n+=1} /ad1/{print n, $0}'
 For certain other cases, I have the following alias in my ~/.zshrc
 that simulates a TTY environment for a tool so it is forced to
 use line-buffered output:
     alias intty='script -qt0 /dev/null'
 So I can write:
     $ intty sometool -args | grep ...
 However, the intty alias only works when it is the first command
 in a pipeline (this is a limitation of the "script" command).
 In the above example, the cat command is not the first, but a
 subshell can be used to work around this:
     $ intty sh -c 'iostat -x 1 | cat -n' | grep ad1
 (It should work with any shell that supports aliases, not just
 zsh, of course.)
 I suggest closing this PR.
 Best regards

More information about the freebsd-bugs mailing list