여러 백그라운드 작업 후에 unix 명령을 실행하는 방법은 무엇입니까?

여러 백그라운드 작업 후에 unix 명령을 실행하는 방법은 무엇입니까?

내 c-셸 코드는 일부 UNIX 명령을 실행하기 전에 일부 동시 백그라운드 작업을 완료해야 합니다. 그러나 내 코드에서 내 백그라운드 작업은 unix 명령에 대한 핸들을 반환하지 않습니다.

$cmd1 | tee $XD/m1.log&
$cmd2 | tee $XD/m2.log&
$cmd3 | tee $XD/m3.log&
$cmd4 | tee $XD/m4.log&

$L1위에 언급된 4개의 명령은 모두 , 및 ( 등) $L2이라는 4개의 서로 다른 파일을 생성합니다 . 첫 번째 줄을 삭제한 후 이러한 파일을 모두 병합해야 하므로 다음 논리를 사용했습니다. 하지만 명령이 실행되지 않는 것 같습니다$L3$L4setenv L1 $XD/div.txtsed

wait $!
echo "Job completed"
sed -i '1d' $L2
sed -i '1d' $L3
sed -i '1d' $L4
cat $L1 $L2 $L3 $L4 >> $L

그런 다음 백그라운드 작업을 실행하려면 어떻게 해야 합니까?

시험을 마친

if (! -e $L4 ) then 
   if ( -f $L4 ) then 
       wait $!
       echo "Job completed"
       sed -i '1d' $L2
       sed -i '1d' $L3
       sed -i '1d' $L4
       cat $L1 $L2 $L3 $L4 >> $L
   endif
endif

그러나 그것은 소용이 없었습니다.

$cmd1 | tee $XD/m1.log&
$cmd2 | tee $XD/m2.log&
$cmd3 | tee $XD/m3.log&
$cmd4 | tee $XD/m4.log&

if (! -e $L4 ) then
  if ( -f $L4 ) then
    wait $!
    echo "Job completed"
    sed -i '1d' $L2
    sed -i '1d' $L3
    sed -i '1d' $L4
    cat $L1 $L2 $L3 $L4 >> $L
  endif
endif

예상되는 결과는 생성된 $L파일( $XD/final.txt)이며, 이는 스크립트가 sed 명령을 포함하는 후반부로 돌아올 때만 발생합니다.

간단히 말해서 스크립트에서 sed 명령으로 이동하기 전에 4개의 cmd* 작업이 모두 완료되었는지 확인하는 방법을 찾고 있습니다. sed 명령에 대한 입력은 cmd* 명령을 사용하여 생성된 출력 파일에 따라 다르므로 순서가 일치해야 합니다. 방법을 찾고 있지만 아직 찾지 못했습니다.

관련 정보