2014-12-16 7 views
0

텍스트 파일의 일부 행에서 명령을 실행하려고합니다. 나는 이것을 위해 아래에 루프를 사용하고있다.쉘에서 for 루프의 병렬 반복

for LINE in `cat $LogDir/details.lst` 
do 
#Queue state dump 
#The following amqldmpa command dumps the queue state every 10 seconds for one minute. 
amqldmpa -m $QMGR -c A -u 1 -q $LINE -d 3 -n 6 -s 10 -f $LogDir/$LINE.txt 
done 

세부 정보에는 20 행이 있습니다. 어떻게이 모든 명령을 병렬로 동시에 실행할 수 있습니까? 또한 모든 줄이 명령에서 성공적으로 실행 된 후에 만 ​​for 루프를 빠져 나올 수 있습니까?

도와주세요. 라인 파일의을 반복 할 수있는 길을 잘못입니다

+2

'gnu parallel' 시도 : http://www.gnu.org/software/parallel – kev

답변

2
  • . while 루프를 사용하십시오. 배쉬는
  • 이 쉘을 가정 배경
  • 각 amqldmpa을 넣어, 당신이 할 wait 내장
while IFS= read -r line; do 
    amqldmpa --options... & 
done < "$LogDir/details.lst" 
wait 
echo "all jobs done" 

그런 식으로 생각하는 모든 백그라운드로 작업의 종료 상태를 잃게 사용합니다.

+0

고마워, 글렌. 이것은 효과가 있었다. for 루프에서도 작동하는지 궁금합니다. 내가 가진 한 가지 질문은, 여기서 기다리는 것이 어떻게 이루어지는 것입니까? while 루프에 의해 생성 된 모든 작업이 완료 될 때까지 자동으로 대기합니까? 작업이 완료되었는지 확인하려면 다른 것으로 확인해야합니까? – user3164754

+0

예, 인수없이 '대기'하면 모든 백그라운드 작업이 완료 될 때까지 대기합니다. https://www.gnu.org/software/bash/manual/bashref.html#index-wait –