[Top][All Lists]
[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
- tee logs no output if stdout is closed,
Bruno Haible <=