[Bash] Shell Script 실행중 에러가 발생하면 자동 exit 1 처리하기 Shell Script


배포를 Jenkins 로 하는데 
이게 배포스크립트에서 실행중 에러가 났을때 exit 1 을 해주지 않으면 

젠킨스 웹상에서 볼때 실패로 보이지 않았다.
그래서 아래와 같은 함수를 만들어서 매번 스크립트에 라인을 실행할때마다 뒤에다가 붙여서 사용중이었다.

function exit_with_errorcode () {
local exitcode=$1
if [ ${exitcode} -ne 0 ]; then
exit 1
fi
}

막.. 이런식으로.. 말이다

git reset --hard
exit_with_errorcode $?
git fetch --all
exit_with_errorcode $?
git checkout ${TARGET_BRANCH}
exit_with_errorcode $?
git pull
exit_with_errorcode $?
너무나 보기 싫지 않은가??
그래서 알아보니 개꿀 커맨드가 하나 있었다.



그건바로 set -e !!!!!!!

이 커맨드를 스크립트 상단에서 날려주면 각 라인의 실행결과를 체크하여 실패할경우, 
바로 스크립트 실행을 에러가 나서 종료 (exit 1) 처리해준다

정확하게 위에서 내가 직접만든 exit_with_errorcode 함수 역할을 해주는것!!
그래서 요렇게 바꾸었다.

set -e

git reset --hard
git fetch --all
git checkout ${TARGET_BRANCH}
git pull
아주 ... 아름답다..

끝!



[전문가를 위한 파이썬 #1] 파이썬 데이터 모델 Python


파이썬 최고 장점 중 하나: 일관성
이 일관성은 파이썬의 데이터 모델에서 찾을 수 있다.

<파이썬 데이터 모델>

- 일종의 프레임 워크 혹은 프로토콜
- 파이썬의 모든 클래스에 어떤 특별메서드를 구현하게 되면, 파이썬 인터프리터가 해당 클래스 객체를 가지고 다양한 표준화된 방식의 응용을 가능하게 해준다.
- 파이썬 인터프리터가 특별메서드를 호출하여 각종 기본 객체 연산을 수행하기 때문에 가능하다.
- 이 기능이 제공되는 기본 연산의 종류: 반복, 컬렉션, 속성 접근, 연산자 오버로딩, 함수 & 메서드 호출, 객체 생성 & 제거, 문자열 표현 or 포맷팅, 블록 및 콘텍스트 관리

--------------------

<파이썬 특별 메서드>

- 동의어: Dunder(Double Under-score) 메서드, Magic Method
- 앞뒤에 이중 언더바를 가지고 있는 메서드 (ex) __get_item__()
- 연산자와 관련이 있는것이 있고, 그 외 파이썬 언어적 특징과 기능에 관련이 있는것들이 있음
- 사용자가 직접호출 하는것이 아닌 파이썬 인터프리터가 사용자의 코드에 의해 암묵적으로 호출하는 메서드
- 파이썬 내장함수로 호출이 가능하다. ex. len(), iter(), str() 등
- 사용자가 모든 파이썬 클래스 객체에 표준 연산을 수행하기 위해 임의 메서드 명을 암기할 필요가 없게 됨.
- 파이썬 표준 라이브러리에서 제공하는 풍부한 기능을 별도로 구현할 필요 없이 바로 사용할 수 있음.

--------------------

[중요!!] 클래스에 사용자 정의 속성 또는 메서드를 만들때,
앞뒤로 이중 언더바를 가진 __my_attr__ 형태의 이름은 절대로 짓지 않도록 한다.

--------------------

<특별메서드의 활용 예>

- Class A 가 __len__() 메서드를 구현하면: A 의 객체 a 의 길이 = len(a)
- Class A 가 __get_item__() 메서드를 구현하면: A 의 객체 a 의 n 번째 아이템 = a[n]
- 이 밖에도 많은 특별메서드를 내장 함수로 호출할 수 있다.

--------------------

<__repr__ 과 __str__ 특별메서드>

- __str__ : 사용자에게 보여주기 적당한 형태의 문자열 반환. print 함수에 의해 암묵적으로 사용된다
- __repr__ : 파이썬 대화형 콘솔 및 디버거에서 사용. 메모리 주소를 포함한 디폴트 문자열을 리턴
- 파이썬 인터프리터는 __str__() 가 구현되어있지 않을 때, 그 대책으로 __repr__() 을 호출
- 즉, 둘중 하나만 구현한다면 repr 을 구현할것.

--------------------

[중요!!] 중위 연산자는 의례적으로 피연산자를 변경하지 않고 새로 만들어서 리턴한다.

--------------------

<__bool__() 메서드>

- boolean 값, 참과 거짓을 판단하기위한 함수
- True 또는 False 를 리턴
- 구현하지 않았을때 __len__() 을 실행
- __len__() 결과가 0 이면 거짓, 그게 아니면 참
- __len__() 도 없으면 무조건 "참"

--------------------

[중요!] 데이터 모델과 관련된 파이썬의 철학 (Zen of python) 2가지
- 특별한 경우는 규칙을 어길만큼 특별하지 않다. = 아무리 특수한 상황이어도 지킬것 (특별 메서드 프로토콜)은 지키자
- 실용성이 순수성보다 우선하다. = 실용적인게 더 좋다

--------------------

<메타객체 프로토콜>

파이썬 객체에 표준 특별 메서드를 커스텀 하게 구현함으로써,
다양한 언어단에서 제공되는 표준 표현식 및 기능을 사용할수 있게되는것.



Mac Mojave crontab error 해결책: Operation not permitted

Max OS Mojave 버전 업데이트를 하고나면 크론탭 파일을 수정할수 없는경우가 있을것이다.
이때, 해결책을 알아보자

1. 일단 아래 가이드에 따라 시스템 설정의 해당 메뉴로 이동

시스템 설정 > 보안 및 개인정보 보호 > 개인정보 보호 탭 > 전체 디스크 접근 권한 

System Preference >Security & Privacy > Full Disk Access

--------

2. 내가 사용하는 터미널 앱을 추가해주자

나같은 경우에는 iTerm 을 사용한다.

+ 버튼 클릭 > Application 폴더에 "iTerm2" 선택 후 확인

"+" button > Add iTerm2 from Application folder


3. Restart iTerm2

-End

[Python] Regex sub 함수에서 replace text 로 match 된 값 활용하기 Python

이 예제만 실행시켜 보면 바로 알것이다.

regex = "abc(\d+)|def(\d+)"
text = "abc123456789"
compiled = re.compile(regex)

new_text = re.sub(compiled, r"number:'\1'", text)
print(new_text)

[Python] Regex sub 함수를 활용한 match object 처리 커스터마이징 (특정 그룹 text 수정하기) Python

파이썬의 built-in library 인 re 에는 sub 라는 함수가있다.

아래 링크를 가보면 documentation을 볼수 있는데,
https://docs.python.org/3.6/library/re.html#re.sub

일단, sub 함수를 간단히 설명하자면 Regex 로 잡힌 문자열을 일괄 치환하는 기능을 가지고 있다.
그래서, 나는 로깅용 텍스트를 입력받아 개인정보에 해당하는 영역을 일괄 치환하고자 아래와 같은 함수를 만들었다.

def remove_private_info(text):
private_info_regex = r"'email'\: \['([\w\.\-]+@[\w\.\-]+)'\]|'phone_number'\: \['(\d+)'\]"

def repl_func(m):
text = m.group(0)
groups = m.groups()

for i in range(len(groups)):
if groups[i] is not None:
text = text.replace(groups[i], "***")

return text

return re.sub(private_info_regex, repl_func, text)
이 예제에서는 email 이나 phone_number 에 해당하는 데이터로 Regex에 잡힌 정보만을
*** 이라는 문자열로 일괄 대치 해주고 있다.



1 2 3 4 5 6 7 8 9 10 다음


통계 위젯 (블랙)

0157
897
189177

GoogleAdsenseResponsive

Cluster map