(echo foo ; sleep 1) | pee cat echo cat cat Outputs just one foo here.
I'm quite sure the issue is that 'echo' close the stream immediately, causing a SIGPIPE that kills the pee process. The same problem happens when you want both head and tail of a large stream: $ seq 100000 | pee 'head -n1' 'tail -n1' 1 14139 Adding empty signal handler for SIGPIPE void handle_sig(int sig) {} /* ... */ signal(SIGPIPE, handle_sig); and simply ignoring the write error in pee.c fixes the head/tail case. A workaround is $ seq 100000 | pee 'head -n1; cat >/dev/null' 'tail -n1' I'm sure there are cases where one wants the SIGPIPE to abort the rest of pipes, but there should at least be an option to ignore it.