This question is addressed in BashFAQ/032. In your example, you would:
{ time sleep 1; } 2> /dev/null
The reason why
time sleep 1 2>/dev/null
doesn't behave how you're expecting is because with that syntax, you'll want to time
the command sleep 1 2>/dev/null
(yes, the command sleep 1
with stderr redirected to /dev/null
). The builtin time
works that way so as to make this actually possible.
The bash
builtin can actually do this because... well, it's a builtin. Such a behavior would be impossible with the external command time
usually located in /usr/bin
. Indeed:
$ /usr/bin/time sleep 1 2>/dev/null $
Now, the answer to your question
Why does the output of some linux programs go to neither STDOUT nor STDERR?
is: it does, the output goes to stdout or stderr.
Hope this helps!