While 루프는 모든 값을 반복하지 않습니다.

While 루프는 모든 값을 반복하지 않습니다.

저는 Python과 C에서 여러 번 실행해야 하는 여러 코드 조각을 만들었습니다. 각 코드는 새로운 입력 값 세트를 사용하여 실행됩니다. 이를 위해 다양한 입력량에 대해 다양한 프로그램을 실행하는 Unix 쉘 스크립트를 만들었습니다.

#!/bin/sh
_file="${1:-/dev/null}"

while IFS=' ' read -r f1 f2 f3 f4  
do
    cd folder1
    cd folder2
    echo "$f1 $f2 $f3 $f4 " > inputs.txt
    mpiexec -n 4 a_C_code
    cd ..
    cd ..
    python3 python_code_1.py
    python python_code_2.py
    python python_code_3.py
    python python_code_4.py
    echo "$f1" #So I know how many times the loops has been performed

done < "$_file"

스크립트로 읽어들이는 파일의 형식은 다음과 같습니다.

1 2 3 4
5 6 7 8
...

그러나 프로그램을 실행하면 첫 번째 입력 세트(이 경우 1 2 3 4)만 반복하고 다른 다양한 입력 그룹에 대해서는 프로그램을 실행하지 않고 완료됩니다.

답변1

셸 코드는 괜찮아 보이고 단순화된 텍스트 버전은 예상대로 작동합니다.

seq 12 | paste - - - - | 
while IFS=' ' read -r f1 f2 f3 f4 ; do 
    echo "$f1 $f2 $f3 $f4 " 
done

산출:

1   2   3   4    
5   6   7   8    
9   10  11  12   

그래서강철 드라이버의 코멘트이는 사실일 수 있으며 프로그램 mpiexec이나 프로그램 중 하나가 python나머지 입력 줄을 소비하므로 echo 두 번째 입력 줄에 도달하지 못합니다.

예를 들어, 배고픈 명령 세트가 추가된 위의 코드를 고려해보세요.

seq 12 | paste - - - - | 
while IFS=' ' read -r f1 f2 f3 f4 ; do 
     echo "$f1 $f2 $f3 $f4 "
     (read x; read x; read x;) 
done

출력(누락된 줄 참고):

1   2   3   4   

관련 정보