내 CI에서 실행되며 물리적 MacOS 및 여러 도커 Linux 이미지에서 코드를 실행하려고하는 다음 bash 스크립트가 있습니다.명령문 중 하나가 오류 코드를 반환하는 경우 Bash - break 조건절!
테스트가 (run_test1
또는
run_test2
을) 실패하면 그들이 오류 코드 반환 전달하는 경우
if [[ "$OS_NAME" == "mac_os" ]]; then
make all;
run_test1;
run_test2;
make install;
else
docker exec -i my_docker_image bash -c "make all";
docker exec -i my_docker_image bash -c "run_test1";
docker exec -i my_docker_image bash -c "run_test2";
docker exec -i my_docker_image bash -c "make install";
fi
들이 오류 코드 1을 반환 0
전체 스크립트는 그래서 0이 아닌 종료 코드를 볼 때마다 중지하고 set -e
으로 실행 전체 빌드를 실패합니다.
현재 run_test1
과 run_test2
이 조건절 안에있는 경우 문제가 발생합니다. 오류 코드 1이 실패하고 오류 코드 1을 반환하면 조건절이 중단되지 않고 테스트가 통과하지 못하고 빌드가 성공합니다. 명령 중 하나가 0이 아닌 에러 코드를 반환하는 경우
- 방법 조건절을 깰 :
그래서 나는이 개 질문이?
- 전체 절이 오류 코드를 반환하는 방식으로 조건부 절을 끊는 방법 (전체 빌드가 실패합니다)?
#!/usr/bin/env bash set -e var="test" if [[ $var = test ]]; then echo "Hello" cat non_existing_file &> /dev/null echo "World" else echo "Else hello" cat non_existing file &> /dev/null fi echo I am done
이 출력됩니다 전용 "안녕하세요"를, 예상대로 예상대로
귀하의 분석이 정확하지 않습니다. 'set -e'가 유효하고'run_test1'이 실패하면 스크립트는 여기서 멈 춥니 다. 뭔가 다른 일이 일어나면 코드의 일부가 표시되지 않았기 때문입니다. [문제를 증명하는 실제 코드] (https://stackoverflow.com/help/mcve)를 게시하십시오. 사용자가 makefile 및 도커 이미지를 사용하지 않고도 쉽게 실행할 수 있도록 단순화하는 것이 좋습니다. – Gilles
http://mywiki.wooledge.org/BashFAQ/105 – pynexj