작업에서 값을 반환하는 방법은 무엇입니까?

작업에서 값을 반환하는 방법은 무엇입니까?

일부 작업을 병렬로 수행하기 위해 스크립트에서 일부 작업을 시작하고 싶습니다. 활성 작업 수를 세어 작업이 완료되는 시점을 알 수 있습니다. 내가 가진 문제는 일시적으로 쓰기와 읽기를 처리하지 않고도 이러한 작업에서 값을 반환하고 싶다는 것입니다.

이 예에서는 실행 중인 작업 수를 계산할 수 있지만 값은 a다음과 같이 업데이트되지 않습니다 456.

function _n_jobs() {
   echo $(jobs -r | wc -l | tr -d " ")
}

a=123

(
   sleep 2s
   a=456
) &

echo "Number of jobs: "$(_n_jobs)

while (( $(_n_jobs) > 0 )); do
   sleep 0.1s
done

echo $a

나는 병렬로 실행되는 작업에서 값을 얻기 위해 서브셸의 출력을 파일 설명자에 쓸 수 있다는 것을 발견했습니다. 하지만 이 서브셸은 작업으로 등록되지 않습니다. 즉, 일련의 병렬 작업이 컴퓨팅 작업처럼 계산될 수 없기 때문에 언제 완료되었는지 알 수 없습니다.

이 예에서는 하위 쉘의 출력을 파일 설명자로 리디렉션하여 하위 쉘에서 값을 얻을 수 있지만 작업 수는 입니다 0.

function _n_jobs() {
   echo $(jobs -r | wc -l | tr -d " ")
}

a=123

exec {fd}< <(
   sleep 2s
   echo 456
)

echo "Number of jobs: "$(_n_jobs)

read <&${fd} a

echo $a

이런 식으로 내 직업의 가치를 반환할 수 있는 방법이 있나요?

예제에서는 숫자를 반환하지만 종료 코드를 읽는 것만으로는 충분하지 않습니다. 결과가 임의적이기를 원하므로 문자열도 반환할 수 있습니다. 이것이 바로 파일 설명자를 사용하는 이유입니다.

관련 정보