Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

How to misplace an entire pipeline



Suspend a pipeline whose tail is a builtin that has already exited, and
the whole job gets lost, orphaning the left hand side:

torch% print $ZSH_VERSION $ZSH_PATCHLEVEL
4.3.12-dev-1 1.5412
torch% sleep 10 | true
torch% jobs
torch% ps ax | grep sleep
32474 pts/2    T      0:00 sleep 10
32480 pts/2    S+     0:00 grep sleep
torch% 

Worse, suspend a pipeline whose tail is a builtin that blocks on I/O:

torch% sleep 10 | sleep 20 | read

The builtin does not get suspended, so the shell is stuck; fortunately in
this case one can interrupt the builtin, again leaving the left side in
limbo:

torch% ps ax | grep sleep
32493 pts/2    T      0:00 sleep 10
32494 pts/2    T      0:00 sleep 20
32501 pts/2    S+     0:00 grep sleep

This used to work, sort of:

torch% print $ZSH_VERSION $ZSH_PATCHLEVEL
4.2.0
torch% sleep 10 | sleep 20 | true

zsh: suspended  sleep 10 | sleep 20
torch% jobs
[1]  + suspended  sleep 10 | sleep 20
torch% 

Note that the builtin is gone but the rest of the pipeline remains a job.

-- 



Messages sorted by: Reverse Date, Date, Thread, Author