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

Reply via email to