[Linux] Redirection (2>&1)
Linux shell에선 출력되는 결과를 다른 방식으로 변경하는 명령이 존재한다.
Standard I/O
0: Standard input
우리가 키보드로 입력하는 것을 표준 입력이라고 말한다. 이는 file descriptor에 0번으로 지정되어 있다.
1: Standard output
우리가 모니터로 출력을 볼 수 있도록 나타내는 곳을 표준 출력이라고 말한다. File descriptor에는 1번으로 저장되어 있다.
2: Standard error
어떤 프로세스를 수행 중 어떤 문제로 인해 error가 발생되는 경우 error 결과물을 출력하는 곳을 표준 에러라고 말한다. File descriptor에는 2번으로 저장되어 있다.
Redirection
Operator | Description |
---|---|
[cmd] > [filename] [cmd] 1> [filename] | 표준 출력 결과를 [filename]으로 출력 |
[cmd] < [filename] | 표준 입력을 [filename]으로 입력 |
[cmd] >> [filename] | 표준 출력을 결과를 [filename]으로 출력 (append) |
[cmd] >& [filename] | 표준 출력의 결과와 표준 에러를 [filename]으로 출력 |
[cmd] >>& [filename] | 표준 출력의 결과와 표준 에러를 [filename]으로 출력 (append) |
[cmd] 2> [filename] | 표준 에러 결과를 [filename]으로 출력 |
[cmd] 2>> [filename] | 표준 에러 결과를 [filename]으로 출력 (append) |
[cmd] 2>&1 | 표준 에러 결과를 표준 출력 결과로 재지정 |
Example
$ ls > log.txt 2>&1
위 명령을 해석해보면, ls
를 통해 나온 표준 출력 결과를 화면에 띄우지 말고 log.txt
에 저장하는데, 2>&1
를 통해 표준 에러를 표준 출력으로 재지정 하라는 뜻이다. 그런데 앞서 표준 출력을 파일에 저장하라고 했기 때문에, 표준 에러 또한 파일로 저장이 된다.
참고로 &1
에서 &
는 표준 출력을 나타내기 위해 사용하는 것이다.
$ /script.sh > /dev/null 2>&1
위 명령을 해석해보면, script.sh
의 표준 출력 결과를 /dev/null
로 저장하는데 이 위치는 모든 결과를 날리는 장소이다. 따라서 화면에 출력하지 않는다는 의미이며, 2>&1
를 통해 표준 에러 결과 또한 표준 출력으로 연결해서 아무것도 나타내지 않겠다는 명령이다.
Reference
- https://inpa.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-devnull-%EB%A6%AC%EB%8B%A4%EC%9D%B4%EB%A0%89%EC%85%98-%EA%B8%B0%ED%98%B8-%EC%A2%85%EB%A5%98
- https://cloud-oky.tistory.com/43