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 |
댓글