먼저 bash에서 &&는 일반적인 고수준 프로그래밍 언어에서 지원하는 AND 연산자와 동일한 역할을 한다.
Bash Reference Manual - 3.2.4 Lists of Commands
https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Lists
AND 이기 때문에
- 앞서 실행된 커맨드의 결과가 성공(zero exit status)인 경우, 뒤의 커맨드를 실행시켜야지 AND 연산 결과를 알 수 있기 때문에 뒤의 커맨드를 실행한다.
- 앞서 실행된 커맨드의 결과가 실패(non-zero exit status)인 경우, AND 연산 결과가 failure이기 때문에 뒤의 커맨드를 실행시키지 않고 연산이 종료된다.
즉, &&를 쓰면 앞의 커맨드가 정상적으로 실행이 완료(exit status가 0)되는 경우에만, 뒤의 커맨드를 실행하라는 의미이다.
간단하게 예를 들어보자.
아래와 같이 실행 후 정상적(zero exit status)으로 종료되는 스크립트 success.sh와
## success.sh
#!/bin/bash
echo It will be succeeded!!
exit 0
오류(non-zero exit status)로 종료되는 스크립트 failure.sh가 있다고 하자.
## failure.sh
#!/bin/bash
echo It will be failed...
exit 1
스크립트 실행을 나열한 스크립트
#!/bin/bash
./failure.sh
./success.sh
위 스크립트를 실행하면 단순히 스크립트를 연달아 실행한다.
$ ./script.sh
It will be failed...
It will be succeeded!!
&&를 사용한 스크립트
#!/bin/bash
./failure.sh && ./success.sh
위 스크립트를 실행하면 failure.sh 의 exit status가 1이기 때문에 뒤의 스크립트를 실행시키지 않는다.
$ ./script.sh
It will be failed...
exit code를 직접 확인하는 스크립트
혹은 아래와 같이 스크립트 실행 결과(exit status)를 변수에 담아 if 문을 통해 분기를 하는 방법도 있다.
#!/bin/bash
./failure.sh
result=$?
if [ $result != 0 ]
then
exit $result
fi
./success.sh
참고:
- Stack Overflow: What is the purpose of "&&" in a shell command?
'ETC' 카테고리의 다른 글
코드리뷰에 대하여 ver.2 (5) | 2023.08.20 |
---|---|
[Tools] Video CC Translator - 영상 자막 번역 Chrome 확장프로그램 (0) | 2022.12.26 |
[Refactoring] 여러 역할을 갖는 엔티티 리팩터링하기 (2) | 2022.11.16 |
입개발) 슬랙 알림 기능 개발 (0) | 2022.08.20 |
다양한 Application Service 설계 방식들 (0) | 2022.08.14 |
댓글