리눅스

표준 입출력 변경과 2>&1

@xftg77g 2022. 8. 12. 00:35

운영체제는 기본적으로 프로그램에게 3개의 파일 디스크럽터를 할당한다.

파일 디스크럽터 설명 기본 값
0 표준 입력 키보드
1 표준 출력 모니터
2 표준 에러 모니터

표준 입력장치 변경

리눅스의 리다이렉트 연산자(<)를 이용한다.

cat < [filename]

위 명령어의 내부 동작은 이렇다. file의 내용을 표준 입력으로 하여 cat에게 리다이렉트하고 cat은 이를 출력하는 것이다.

표준 출력장치 변경

리눅스의 > 연산자를 사용하면 기본적으로 표준 출력이 리다이렉트 된다. 사실 > 연산자 앞에 파일 디스크럽터의 번호를 표기하는 것이 정석이지만 생략하게되면 1번이 기본으로 설정된다.

cat [filename] 1> /dev/null  # 이것이 정석

cat [filename] > /dev/null   # 암묵적으로 표준 출력이 리다이렉트 된다
/dev/null로 출력을 리다이렉트하면 출력값이 버려진다.

2>&1은 뭘까?

끊어서 생각해보자. 2> 는 표준 에러의 출력을 리다이렉트 하겠다는 의미이다. 그리고 &1는 표준 출력을 표준 에러의 출력으로 함께 사용한다는 의미이다. 따라서 표준 에러의 출력이 표준 출력과 함께 리다이렉트 된다.

 

다음 예제를 보자.

cat test.txt 1> /dev/null 2>&1

cat 명령어를 이용한 test.txt 내용의 표준 출력이 /dev/null로 리다이렉트 되었다. 또한 2>&1 연산으로 인해 표준 에러의 출력도 /dev/null로 리다이렉트 되었다고 볼 수 있다. 따라서 명령어를 수행했을 때 No such file or directory 같은 에러가 발생한다면 /dev/null로 출력이 리다이렉트 될 것이다.