본문 바로가기
기타

[bash] file descriptor redirection 문법

by 초특급하품 2020. 10. 14.

stdin의 file description은 0, stdout은 1, stderr는 2번이다.

입력은 <, 출력은 >, 이어서 출력은 >> 로 redirection 한다. 이때 입력의 기본 fd는 0(stdin), 출력, 이어서 출력의 기본은 1(stdout)이다. 따라서 이 redirection 기호는 0<, 1>, 1>> 와 같다. redirection 왼쪽에 file description를 사용한다면 공백이 없어야 한다.

 

redirection 오른쪽에는 파일 이름 또는 file description이 온다. 이 둘을 구분하기 위해 file description이 올 경우에는 &를 붙여줘야 하고 공백도 없어야 한다.

 

 

예시

현재 폴더에 존재하지 않는 unknownfile을 읽어서 에러를 발생시켰다.

 

>를 사용해서 stdout을 >redirection 했지만 실제 결과는 stderr라서 result.txt 파일에 써지지 않는다.

$ cat unknownfile > result.txt
cat: unknownfile: No such file or directory

 

이렇게 stderr(2)를 stdout(1)로 redirection 해주면 원하는 result.txt 파일에 결괏값을 담을 수 있다.

$ cat unknownfile > result.txt 2>&1
$ cat result.txt
cat: unknownfile: No such file or directory

 

stdout, stderr result.txt 파일로 redirection 할 때 &> 문법을 사용해도 된다.

$ cat unknownfile &> result.txt
$ cat result.txt
cat: unknownfile: No such file or directory

 

 

주의할 점은 redirection은 왼쪽부터 순서대로 해석되기 때문에 2>&1을 > result보다 먼저 쓰면 결과가 달라진다.

$ cat unknownfile 2>&1 > result.txt
cat: unknownfile: No such file or directory

 

앞에서부터 차례대로 stderr를 stdout로 바꾸고, stdout을 result.txt로 바꿨기 때문에 stderr는 stdout으로 출력된다.

'기타' 카테고리의 다른 글

vim plugin 설치 방법  (0) 2021.03.21
Docker network mode  (0) 2020.05.07
Swagger openapi 사용법  (0) 2020.04.02
CSS flex 기본  (0) 2020.03.12
분산 트랜잭션 - 2단계 커밋(two-phase commit)  (0) 2020.02.20

댓글