쉘 스크립트에서 백그라운드 명령이 실패하면 종료

쉘 스크립트에서 백그라운드 명령이 실패하면 종료

이 문제가 해결되었다고 확신하지만 답변을 찾는 방법을 잘 모르겠습니다.

#!/usr/bin/env bash

set -e;
false &
wait;
echo "lol"

이것을 실행하면 "ㅋㅋㅋ"이 나옵니다.

백그라운드 명령(이 경우 "false")이 0이 아닌 값으로 종료되는 경우 스크립트를 종료할 수 있는 방법이 있습니까?

이 경우 set -e;명령이 0이 아닌 값으로 종료되고 명령이 백그라운드에서 실행 중이면 스크립트가 계속되는 것을 막지 못하는 것 같습니다.

답변1

최신 버전의 bash를 사용하고 있다면(이 기능은 bash 4에 도입된 것 같습니다) wait -n.

wait그렇지 않으면 시작한 백그라운드 프로세스의 pid가 포함된 매개변수를 전달할 수 있으며 , 이는 $!작업을 수행한 후 즉시 반환됩니다.

보다명령을 기다리는 문서명령 반환 상태 에 대한 wait자세한 내용 입니다.

이렇게 하면 트릭을 수행할 수 있습니다.

set -e
false &
wait -n
echo "lol"

이것도 잘 작동합니다.

set -e
false &
background_pid=$!
wait "${background_pid}"
echo "lol"

관련 정보