pungjoo

standard output and standard error 본문

미분류

standard output and standard error

pungjoo.kim 2005. 4. 21. 20:24
들어 가면서
우리들에게 입력과 출력을 담당하는 디바이스가 점점 많아지고 있습니다. 이런 입/출력 디바이스 중에 표준 출력에 대해서 알아 봅시다. 더불어 표준 오류도...


경험
쉘(shell) script를 보면 끝자락에 '> /dev/null  2>&1' 같은 이상 야릇한 기호가 들어 있는 경우가 있습니다.


풀이
'>'의 의미는 좌측에서 행해진 결과를 '>'를 기준으로 우측으로 보낸다는 의미입니다.
'> /dev/null' 은 결국 좌측에서 행해진 결과를 우측인 '널 디바이스'에게 보낸다는 것이죠. 즉 허공에 날린다....

그런데 이때 중요한 표준 오류에 대해서 간과하는 경향이 있습니다. 즉, 표준 출력만 알고 표준 오류는 모른다는 것이죠. 이클립스 같은 IDE를 사용하다 보면 오류 부분이 '붉은색(정의 하기 나름이겠지만)'으로 보이는 경험을 했을 것입니다. 이 부분은 일반적으로 System.err.print..(); 을 통해 출력한 내용입니다. logging을 사용하고 있다면 로깅 레벨에 따라서 붉게 표기가 되는 경우가 있겠죠..


예제
[pungjoo@do1 /home/pungjoo/test]$ ls -la
합계 12
drwxrwxr-x    2 pungjoo  pungjoo      4096  4월 21 08:05 .
drwx------    9 pungjoo  pungjoo      4096  4월 21 07:56 ..
-rw-rw-r--    1 pungjoo  pungjoo       150  4월 21 08:04 Test.java
[pungjoo@do1 /home/pungjoo/test]$ cat Test.java
public  class   Test {

        public  static void main(String[] args) {

                System.out.println( "표준 출력" );
                System.err.println( "표준 에러" );

        }
}


위와 같은 예제를 평상시 처럼 실행해 보겠습니다.
[pungjoo@do1 /home/pungjoo/test]$ java Test
표준 출력
표준 에러

[pungjoo@do1 /home/pungjoo/test]$

이번에는 표준 출력에 대한 이상 야릇한 문자열을 넣어 실행해 보겠습니다.
[pungjoo@do1 /home/pungjoo/test]$ java Test 2> error.txt
표준 출력
[pungjoo@do1 /home/pungjoo/test]$ cat error.txt
표준 에러
[pungjoo@do1 /home/pungjoo/test]$

'2> error.txt'를 추가를 하고 실행하니 '표준 출력'만 표기가 되고 있는 것을 볼 수 있습니다. 또한 error.txt를 보면 출력되지 않았던 '표준 에러'라는 문자열이 보입니다.

이번에는 다른 문자열을 넣어 실행해 보겠습니다.
[pungjoo@do1 /home/pungjoo/test]$ java Test 1> out.txt
표준 에러
[pungjoo@do1 /home/pungjoo/test]$ cat out.txt
표준 출력
[pungjoo@do1 /home/pungjoo/test]$

이번에는 '1> out.txt'를 추가하고 실행하니 위와는 반대로 '표준 에러'만 표기 되고 out.txt에 '표준 출력'이라는 문자열이 들어가 있는 것을 볼 수 있습니다.


정리
1> /tmp/log.txt 는 표준 출력에 해당하는 디바이스를 화면이 아닌 file로 변경한 것이고
2> /tmp/log.txt 는 표준 오류에 해당하는 디바이스를 화면이 아닌 file로 변경한 것입니다.
> /tmp/log.txt 2>&1 는 표준 출력/ 표준 오류를 표준 디바이스에서 /tmp/log.txt file로 변경한 것입니다.

@
0 Comments
댓글쓰기 폼