이 bash 스크립트가 있습니다.
echo "x" & X=$!
echo "y" & Y=$!
( echo "z" ; exit 0; ) & Z=$! # this line
wait ${X} && echo "X $?"
wait ${Y} && echo "Y $?"
wait ${Z} && echo "Z $?"
종료 0을 종료 1로 변경하면 스크립트의 마지막 에코 문이 실행되지 않습니다. 예를 들어 종료 코드가 0일 때의 출력은 다음과 같습니다.
x
X 0
z
y
Y 0
Z 0
하지만 1로 변경하면 다음과 같습니다.
x
y
X 0
z
Y 0
나는 괄호 안의 내용이 서브쉘에서 실행되어야 한다고 가정합니다. 내 코드가 왜 이런 일을 하는지 아는 사람이 있나요?
답변1
다음 문서에 설명되어 있습니다 help wait
.
ID의 상태를 반환합니다.
따라서 프로세스가 종료되면 1
wait는 두 번째 명령을 실행하지 않고 반환 1
하고 &&
단락시킵니다. 첫 번째 명령의 성공 여부에 관계없이 값을 인쇄하려면 ;
대신 시도하십시오.&&