루프를 사용하여 여러 명령을 병렬로 실행하고 싶습니다 for
. 각 명령에는 다소 시간이 걸릴 수 있으며 스크립트 끝에서 다른 명령을 호출하고 싶습니다. 다음은 최소한의 예입니다.
#!/bin/bash
function test {
length=$1
sleep $length
echo "$length"
echo "-----"
}
# http://www.cyberciti.biz/faq/bash-for-loop-array/
array=( 5 1 3 )
for time in "${array[@]}"
do
test $time &
done
결과는 다음과 같습니다.
$ bash ~/test.sh && echo "OK"
OK
$ 1
-----
3
-----
5
-----
보시다시피 OK
스크립트가 끝나기 전에 표시됩니다. 이는 test
백그라운드에서 호출하기 때문에 논리적입니다. 마지막 호출은 다른 호출보다 먼저 끝날 수 있기 때문에 테스트를 추가 &
할 수 없습니다 . 백그라운드 호출의 모든 인스턴스가 종료된 후에만 test
스크립트를 종료하고 싶습니다 .test
이것이 내가 얻으려는 결과입니다.
$ bash ~/test.sh && echo "OK"
1
-----
3
-----
5
-----
OK
$
이 출력을 어떻게 얻을 수 있습니까?
답변1
당신은해야합니다기다리다루프를 수행한 후 for
현재 활성화된 모든 하위 프로세스를 기다립니다.
for time in "${array[@]}"
do
test "$time" &
done
wait