bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

tee logs no output if stdout is closed


From: Bruno Haible
Subject: tee logs no output if stdout is closed
Date: Mon, 30 Jun 2008 03:20:48 +0200
User-agent: KMail/1.5.4

tee appears to drop its input (i.e. it does not write it into the specified
log file) if stdout is closed.

I didn't expect this behaviour, and POSIX
   http://www.opengroup.org/susv3/utilities/tee.html
does not mandate this behaviour either. Rather, it says:
  "If any file operands are specified, the standard input shall be copied to
   each named file."

$ tee --version
tee (GNU coreutils) 6.12.70-4f470

$ rm -f empty; touch empty; rm -f output output2; \
  for a in 0 1 2 3 4 5 6 7 8 9 ; do \
    for b in 0 1 2 3 4 5 6 7 8 9 ; do \
      echo g$a$b | tee -a output; \
      echo h$a$b >> output2; \
    done; \
    sleep 2; \
  done \
  | { sleep 1; join --nocheck-order -v 2 - empty; }

The 'join' command notices that its second argument is empty, stops reading,
and exits immediately.
As a result, while a is 1 2 3 4 5 6 7 8 9, stdout is already closed.
The file 'output2' contains 100 lines, which shows that all loop iterations
were performed. The file 'output' contains only 10 lines, showing that 'tee'
dropped the output for a > 0.

Bruno





reply via email to

[Prev in Thread] Current Thread [Next in Thread]