Bash- 하위 프로세스에서 상위 프로세스로 값을 반환합니다.

Bash- 하위 프로세스에서 상위 프로세스로 값을 반환합니다.

나는 아래 코드를 사용하고 있습니다

record_count=0
task()
{
while read -r record ; do
record_count=$(( record_count + 1 ))
.....
done < $1
}

for i in {1..5}; do
task $i &
done

하위 쉘\하위 프로세스에서 상위 쉘\프로세스로 Record_count를 어떻게 사용할 수 있습니까? 나는 시도했지만 return record_count작동하지 않습니다. 값을 반환하는 다른 방법이 있습니까(가능한 경우 반환할 값이 두 개 이상임)

답변1

"return"은 종료 코드에 대한 것이며 일반적으로 "0"은 성공을 나타내고 다른 모든 것은 실패를 나타냅니다. 그리고 256보다 작은 정수여야 하므로 일반적으로 여기서 예상되는 종류의 결과를 반환하는 데 유용하지 않습니다.

그러나 하위 프로세스는 결과를 텍스트로 생성할 수 있으며 기본 프로세스는 선택적으로 해당 결과를 캡처할 수 있습니다.

record_count=0
task()
{
    while read -r record
    do
        record_count=$(( record_count + 1 ))
    done <$1
    echo $record_count
}

(
    for i in {1..5}
    do
        task $i &
    done
    wait
) \
| sort

"대기"는 진행하기 전에 모든 하위 프로세스가 완료되었는지 확인합니다.

병렬 프로세스에서는 완료되는 순서가 보장되지 않으므로 결과가 반드시 1, 2, 3, 4, 5 순서로 표시되는 것은 아닙니다.

무작위 순서가 문제인 경우 프로그램은 "키"를 작업에 전달할 수 있으며 해당 키를 사용하여 출력을 정렬할 수 있습니다. 이 경우 $i 자체가 키가 될 수 있지만 일반적으로 파일 이름은 단순한 정수가 아닙니다.

답변2

숫자가 0에서 255 사이인 경우에만 사용 return record_count하고 올바른 결과를 얻을 수 있습니다. 그리고 반환 코드를 다음과 같이 사용해야 합니다.

for i in {1..5}; do
task $i ; echo $?
done

관련 정보