리눅스/서버 백업

명령어 - set [옵션] [옵션명]

Aif 2023. 9. 1. 14:40

리눅스 쉘 스크립트 코드는 디버깅이 없고, 오류가 발생해도 무시하고 진행된다.

 

이럴 경우 값이 제대로 들어가지 않아 뒤에 코드가 오류가 생기는 경우가 있다.

 

이럴때 set 옵션을 줘서 디버깅하는 효과를 줄 수 있다.

 

우선 set를 설명하기 전에 PIPESTATUS에 대해 알아야한다.

 

https://aif0921.tistory.com/43

 

리눅스 0, 1 / PIPESTATUS

리눅스에서 0은 성공, 1은 실패이다. true echo $? false echo $? 확인해보면 알 수 있다. 성공 여부는 마지막 실행 문장에 대해서만 저장된다. 그리고 파이프 문으로 연결될 시 파이프가 실패해도 성공

aif0921.tistory.com

 

set 에는 e, o, u, x 가 많이 사용되는 듯 하다. 다른 옵션은 찾아봐야함

e

일단 e는 스크립트 문법 자체에 문제가 되면 종료하게 된다.

#! /bin/bash

echo first
cat asdasd
echo second

다음과 같이 실행하면 오류는 뜨지만 결국 second 까지 실행이 된다.

 

#! /bin/bash

set -e

echo first
cat asdasd
echo second

set -e를 추가하면 second는 출력되지 않는다.

그리고 실패를 반환한다.

u

는 e와 다르게 변수에 대한 오류는 찾는다. e는 실행문 자체의 오류라면 u는 선언되지 않는 변수에 엄격하다.

x

는 실행되는 문장을 출력하고 그 결과도 출력한다. 디버깅 모니터링 용인듯

 

마지막으로 

o

는 뒤에 옵션명을 적어주는데 pipefail에 대해 알아보겠다. 다른것도 있나모르겠음

 

pipefail은 PIPESTATUS와 연관이 있다.

 

PIPESTATUS에서 하나라도 실패면 실패를 반환하게 한다.

 

그러면 e에서 실패를 확인하고 종료하게 되는 로직이다.

 

#! /bin/bash

set -e

echo first
cat asdasd | wc -l
echo second

출력됨

 

#! /bin/bash

set -eo pipefail

echo first
cat asdasd | wc -l
echo second

출력안됨