On 02/17/2015 08:36 AM, Bernhard Voelker wrote: > On 02/17/2015 03:44 AM, Pádraig Brady wrote: >> + yes | returns_ 1 timeout 10 tee /dev/full 2>err >/dev/full || fail=1 > > This test case combines 2 test cases, i.e., when writing to the output > file *and* to stdout is returning an error: > > $ yes | timeout 10 src/tee /dev/full > /dev/full ; echo $? > src/tee: standard output: No space left on device > src/tee: /dev/full: No space left on device > 1 > > But if run separately, then we run into timeouts again: > > $ yes | timeout 10 src/tee /dev/null > /dev/full; echo $? > src/tee: standard output: No space left on device > 124 > > $ yes | timeout 10 src/tee /dev/full > /dev/null; echo $? > src/tee: /dev/full: No space left on device > 124 > > Isn't exiting early in both cases what you wanted to achieve?
Oho, read this [0]: CONSEQUENCES OF ERRORS If a write to any successfully opened file operand fails, writes to other successfully opened file operands and standard output shall continue, but the exit status shall be non-zero. [...] Therefore your patch is right; only the test case doesn't cover the case where tee has to continue if any of the output files or stdout can still be written. [0] http://pubs.opengroup.org/onlinepubs/9699919799/utilities/tee.html Have a nice day, Berny
