On Wed, Apr 09, 2014 at 12:43:40PM +0200, Håkon Bugge wrote:
> This script never terminates:
> --------------------------------------------------
> #!/bin/bash 
> 
> for P in `seq 5`; do 
>     sleep 1&
> done
> 
> while true; do
>     usleep 20000
>     set foo `jobs -p`
>     LEFT=$#
>     LEFT=$[LEFT-1]
>     echo $LEFT jobs left
>     if [ x$LEFT = x0 ]; then
>       break
>     fi
> done

>    Pasting the same commands in an interactive shell, its works.

Interactive shells enable job control (monitor mode), whereas
noninteractive shells (scripts) do not.  If you want to use job control
commands (like "jobs") within a script, you must enable monitor mode
(set -m, or set -o monitor, or #!/bin/bash -m).

Reply via email to