본문 바로가기
개발/쉘스크립트

[Shell Script] 출력 내용의 맨 뒤에 붙는 '2>&1' 의 뜻

by 카펀 2022. 3. 28.

Linux 환경에서 서버를 관리 및 운영하다 보면, 쉘 스크립트를 작성할 일이 매우 많습니다 (.sh 파일).

여기서는 수많은 문법을 통해 다양한 기능을 지원하는데요.

 

예전에 제가 작성한 쉘 스크립트 코드를 보면 이런 내용이 있습니다.

 

nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &

 

repository 디렉토리 내의 jar 파일을 실행하고, 그 결과를 nohup.out이라는 파일에 기록합니다.

 

여기서 2>&1이 무슨 의미를 가질까요?

 

Linux에서는 실행되는 프로그램에게 '파일 디스크립터' 라는 것을 할당해 줍니다.

기본적으로 할당되는 파일 디스크립터는 총 3개로, 아래와 같습니다.

 

파일 디스크립터 정의
0 표준 입력 (standard input)
1 표준 출력 (standard output)
2 표준 에러 (standard error)

이 프로그램이 내부적으로 다른 파일을 열면, Linux에서는 4번째 파일 디스크립터 (3)을 할당합니다.

 

프로그램이 실행되면, Linux는 이 프로세스가 어디로부터 입력을 받고, 어디로 출력을 내보내며, 에러가 발생하는 경우 어디로 내보낼지 정해 주게 됩니다. 이를 정해주는 기본값이 표준 입/출력 및 에러입니다.

 

다시 돌아가서, 2>&1이라는 내용을 봅시다.

2는 표준 에러를 뜻합니다. 

> 는 2를 &1로 오버라이딩 한다는 의미입니다.

&1은 표준 출력을 의미합니다.

따라서 2>&1은 에러가 발생하면, 표준 에러를 표준 출력으로 리다이렉팅 하여 내보낸다는 뜻이 됩니다.

그러면 어떻게 될까요? 표준 출력과 함께 출력이 기록되게 됩니다.

실제로 제가 제작한 서비스에서 기록되었던 에러 메세지입니다.

마찬가지로 뒤에 2>&1을 붙였고, 에러 내용이 위와 같이 기록되는 것을 볼 수 있습니다.

 

 

더보기

글 작성을 위해 끄적인 내용

 

댓글