Linux Shell에서 명령어를 실행할 때 에러에 대한 부분을 파일로 저장한다거나 에러만 찾아서 추가적인 처리를 하고 싶을 때 Error Redirection이라는 기능을 사용할 수 있습니다.
매번 찾아봐야 하는 수고로움이 있지만 귀차니즘 때문에 못하다가 결국 이제야 정리를 해서 간단하게 올려봅니다.
참고적으로 아래의 내용은 Linux에서 표준이라고 일컫는 Bash Shell에서 정상적으로 작동합니다. 다른 Shell이라면 어떻게 될지 알 수가 없습니다.
Linux에서 많이 사용하는 Bash 또는 여타 Shell에서 사용자는 다양한 I/O 관련 Redirection(리다이렉션) 기능을 사용하여 많은 일을 할 수가 있습니다.
일단 Bash Shell은 아래의 세 가지 파일 오픈에 대한 스트림을 지원하고 있습니다.
- stdin : 키보드를 통한 데이터 입력(input)
- stdout : 명령어 실행시 출력되는 내용을 화면에 표시
- stderr : 명령어 실행시 발생하는 에러 메세지를 화면에 표시
위의 I/O 스트림 처리를 위해 Bash Shell은 아래처럼 특별한 핸들러를 또한 제공하고 있습니다.
Handler (핸들러) |
Name (이름) |
Description (설명) |
0 |
stdin |
Standard input |
1 |
stdout |
Standard output |
2 |
stderr |
Standard error |
위에서 설명한 내용을 바탕으로 아래의 작업에 활용할 수 있습니다.
- Redirect stdout to a file
- Redirect stderr to a file
- Redirect stdout to a stderr
- Redirect stderr to a stdout
- Redirect stderr to a stdout to a file
$ ls -l > ls-l.txt => 'ls -l' 명령어를 실행하여 화면에 출력되는 결과 모두를 'ls-l.txt' 파일을 생성하여 저장함 |
$ grep da * 1> grep-errors.txt => 'grep-errors.txt' 파일을 생성한 후 'grep' 명령어 수행시 Error로써 출력되는 부분만 저장됨 |
$ grep da * 1>&2 => 'grep' 명령어 수행 결과를 stderr으로 리다이렉션시킴 |
$ grep da * 2>&1 => 'grep' 명령어 수행 중 발생하는 Error를 stdout으로 리다이렉션시킴 |
$ find /etc -name '*test*' 2>&1 > find_test.txt => 'find' 명령어 수행 중 발생하는 Error를 stdout으로 리다이렉션 후 파일로 저장함 => Error 메세지를 보지 않으려면 파일명 대신에 /dev/null을 지정할 수도 있음 |