다른 것에 대한 테스트로 다음 명령을 실행하려고 합니다.
function echo_test {
sleep 60 & > /dev/null
returnpid=$!
echo $returnpid
}
pidthatwasreturned=$(echo_test)
echo "This was the value that was returned by the function:"
echo $pidthatwasreturned
문제는 백그라운드에서 실행 중임에도 불구하고 sleep이 완료될 때까지 함수가 종료되고 반환되지 않는다는 것입니다. 제가 개발 중인 스크립트에서는 sleep 명령이 장기 실행 명령으로 효과적으로 대체됩니다. 이 함수를 재정의하여 즉시 반환되도록 하는 방법이 있습니까?
답변1
함수는 종료되지만 쉘은 pipe
함수 내에서 함수를 읽는 코드를 설정 stdout
하고 그 결과를 변수에 넣습니다 pidthatwasreturned
.
그러나 파일 설명자는 stdout
이 명령에 의해 60초 동안 sleep
열린 상태로 유지됩니다 .
함수는 echo 명령의 출력을 리디렉션하지만 해당 sleep
명령은 리디렉션하지 않으므로 변수 할당은 stdout
from sleep
이 닫힐 때까지 기다립니다.
&
와 를 바꾸면 > /dev/null
에서 잘 작동 하고 에 버그가 없는 한 에서도 Bourne Shell
잘 작동해야 합니다 .bash
bash