From owner-freebsd-bugs@FreeBSD.ORG Thu Feb 16 14:00:30 2012 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E09AC106564A for ; Thu, 16 Feb 2012 14:00:30 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id C9AB68FC0C for ; Thu, 16 Feb 2012 14:00:30 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.5/8.14.5) with ESMTP id q1GE0UGw090337 for ; Thu, 16 Feb 2012 14:00:30 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.5/8.14.5/Submit) id q1GE0Una090336; Thu, 16 Feb 2012 14:00:30 GMT (envelope-from gnats) Date: Thu, 16 Feb 2012 14:00:30 GMT Message-Id: <201202161400.q1GE0Una090336@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: Oliver Fromme Cc: Subject: Re: kern/154915: [libc] [patch] Force stdio output streams to line-buffered mode X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Oliver Fromme List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Feb 2012 14:00:31 -0000 The following reply was made to PR kern/154915; it has been noted by GNATS. From: Oliver Fromme To: bug-followup@FreeBSD.org, jeremie@le-hen.org Cc: 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 this): $ 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 Oliver