On Thu, Sep 15, 2005 at 09:52:14PM +0200, Jean Delvare wrote:
> $ time true | sleep 1
>
> real 0m1.012s
> user 0m0.004s
> sys 0m0.004s
>
> $ (time true) | sleep 1
>
> real 0m0.007s
> user 0m0.004s
> sys 0m0.004s
>
> I guess the left-hand side of the pipe needs to wait for the right-hand
> side of the pipe to exit before it can exit itself, in order to get the
> return code or something alike.
Bear in mind that "time" is a reserved word in bash and is considered
part of the basic pipeline grammar. It's applied to its entire
pipeline, not just the first command. From the bash "Pipelines" info
node:
The format for a pipeline is
[`time' [`-p']] [`!'] COMMAND1 [`|' COMMAND2 ...]
You can see the difference if you force the shell to use the non-builtin
time program instead:
$ /usr/bin/time true | sleep 1
0.00user 0.00system 0:00.01elapsed 0%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (102major+9minor)pagefaults 0swaps
$ (/usr/bin/time true) | sleep 1
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (102major+9minor)pagefaults 0swaps
And the word "time" behaves as a normal command if you place it in the
middle of the pipeline:
$ true | time true | sleep 1
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (102major+9minor)pagefaults 0swaps
> $ time (true | sleep 1)
>
> returns only after the 1 second sleep, but doesn't print anything. I
> have no idea why.
This happens for anything using parentheses grouping:
$ time (true)
Perhaps it's a bug in the bash parser. I notice that it does work as
expected for brace grouping:
$ time { true | sleep 1; }
real 0m0.000s
user 0m0.000s
sys 0m0.000s
Also of note:
$ time true && sleep 1
real 0m0.000s
user 0m0.000s
sys 0m0.000s
-Dave Dodge
_______________________________________________
Quilt-dev mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/quilt-dev