For 루프를 순차 실행으로 변환하는 방법

For 루프를 순차 실행으로 변환하는 방법

나는 다음 for루프를 작성했습니다(더 나은 가독성을 위해 여기에서 여러 줄에 걸쳐 표시).

for F in CLEAN_READS/*_1.fa; do
  R=${F%_*}_2.fa; BASE=${F##*/};
  SAMPLE=${BASE%_*};
  metascript assembly -1 $F -2 $R -o folder_${BASE%_*} &
done

루프를 실행하면 모든 스크립트가 병렬로 시작됩니다. 스크립트를 순차적으로 실행하도록 루프를 어떻게 변경할 수 있습니까?

답변1

이 동작의 이유는 &명령을 백그라운드로 보내고 즉시 다음 명령으로 전달하는 명령 끝에 추가했기 때문입니다.

해당 루프를 제거하면 루프는 예상대로 작동해야 합니다 &. 지시문을 끝내려면 지시문을 추가해야 합니다 ;(원래 게시된 대로 한 줄에 모두 입력하는 경우). 그렇지 않으면 셸에서 오류 메시지가 생성됩니다.

또한 Stéphane Chazelas가 지적했듯이 변수 확장을 인용하는 습관을 들여야 합니다(적절한 경우 대부분의 경우 좋은 소개를 찾을 수 있습니다).여기.

관련 정보