본문 바로가기
프로그래밍/리눅스

Shell script STDOUT vs STDERR (2>&1)

by Hwan2 2021. 9. 26.
728x90
반응형

 

 

Bash shell에서는 표준출럭(stdout) 과 표준에러(stderr)이 있습니다.

서로 출력을 해주는 것이지만 성격이 다릅니다.

 

이것들을 설명해보고자 합니다.

 

1.File descriptor

STDIN 0
STDOUT 1
STDERR 2

파일 디스크립터는 파이프, FIFO, 소켓, 터미널, 디바이스, 일반파일 등 종류에 상관없이 모든 열려있는 파일을 참조할때 쓴다.

 

2. STDOUT vs STDERR

해당 출력은 stdout에 해당될까? stderr에 해당될까?

 

답은 stdout에 해당되는 출력입니다.

 

해당 출력은 stderr에 해당되는 출력입니다.

 

두개의 공통점은 출력을 해주고 있는 것이죠.

 

하지만... 쉘 스크립트를 만들어 실행시키다 보면 해당 문구가 정상 출력 문구인지, 에러 출력 문구인지 구분하기 힘들때가 있습니다.

 

이를 해결할 수 있는 방법이 I/O Redirection입니다.

 

3. I/O Redirection

우선 stdout 출력과 stderr출력을 구분해 봅시다.

위에 File descriptor에서 보이듯이 1은 표준출력(stdout)입니다. 이를 redirection을 사용해,

"정상 출력은 /dev/null(black hole)로 보내라" 라는 뜻입니다.

 

때문에 위 사진을 보면 정상 출력들은 안나오고 오류 문고만 출력이 되죠. 반대로 해도 마찬가지 입니다.

이를 통해 확실하게 stdout과 stderr을 구분할 수 있게 되었습니다.

 

2>&1

에러인 출력도 표준 출력으로 내보내라는 뜻입니다. 

반응형

댓글


스킨편집 -> html 편집에서