이 문제가 해결되었다고 확신하지만 답변을 찾는 방법을 잘 모르겠습니다.
#!/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"