On 19 Mar 2015, at 02:37, Joseph Tam <jtam.h...@gmail.com> wrote:
> 
> 
>> doveadm who -1 2>/dev/null | wc -l
> 
> You have to redirect stderr to /dev/null because that's where the
> first header line is written to.  The default format style (table)
> is inconsistent with the other formats (flow,pager,tab) that write
> headers and data to stdout.
> 
> The following patch will pick this nit.  This patch will require
> modifications to scripts that rely on doveadm writing headers to stderr.
> For example, the above doveadm command could be modified to
> 
>       doveadm who -1 | grep -vc '^username'

There's no reason why flow and pager should write headers to stderr because it 
would always result only in a mess. But instead of changing table headers to 
write to stdout, I think a better fix would be to make tab formatter write 
headers to stderr. Including headers in stdout makes it more difficult to write 
scripts that access the actual data. For example now you can do "doveadm who -1 
| sort" and the output will work. If headers were written to stdout you'd have 
to make it more complicated. Also you can now easily specify what you want to 
do with the headers, 2>/dev/null if you don't care about them or 2>&1 if you 
want to include them in stdout (which works even after |sort).

So, I'll add in my v2.3 TODO that tab formatter should write to stderr..

Reply via email to