ожидание выхода без выхода из дочернего процесса - PullRequest
3 голосов
/ 08 сентября 2011

В моем сценарии оболочки «wait» не ожидает выхода xx.sh, yy.sh и zz.sh! ПОЧЕМУ!

#main.sh
#!/bin/bash
idx=0
while (($idx<1))
do`cd ff
    ./xx.sh >xx&
    ./yy.sh >yy&
    ./zz.sh >zz&
    cd -
    idx=$(($idx+1))  
done|ls
wait
echo "END"


#xx.sh,yy.sh,zz.sh is for sleep

Ответы [ 2 ]

2 голосов
/ 08 сентября 2011

команды выполняются в другой подоболочке, поэтому ожидание не ожидает правильных процессов.Чтобы увидеть это, попробуйте

./xx.sh >xx &
./yy.sh >yy &
./zz.sh >zz &
wait #this should wait for all of the processes

. Если вы хотите порождать цикл с помощью цикла, создайте строку команды для запуска и затем запустите ее в основном скрипте (не в цикле for).

0 голосов
/ 12 февраля 2012
#main.sh
#!/bin/bash
idx=0

( # subshell
   while (($idx<1))
   do
       echo ./xx.sh \>xx&
       echo ./yy.sh \>yy&
       echo ./zz.sh \>zz&
       sleep 5;
       echo "all done";
       idx=$(($idx+1))
    done
)& FOR=$!

echo "Waiting for process $FOR"
wait $FOR
echo "END"
...