Bash 터미널 에서 Java 프로그램을 실행 중이고 OS X 10.8
해당 프로그램이 생성하는 출력을 다시 지정하려고 합니다.
그러나 파이프를 통해 이를 실행하거나 파일로 다시 리디렉션하면 출력이 비어 있지만 터미널에는 출력이 표시됩니다.
이를 설명하려면 다음을 수행하십시오.
> java program.java
13/10/02 14:18:30 WARN some
13/10/02 14:18:30 INFO log
13/10/02 14:18:30 INFO messages
...
> java program.java > log
> cat log
>
Java 프로그램이 가 아닌 다른 스트림에 쓰도록 설정할 수 있지만 stdout
스트림은 여전히 터미널에서 출력을 생성합니다. 그런 일이 가능합니까?
답변1
있다삼stdin
(표준 입력), stdout
(표준 출력) 및 stderr
(표준 오류) 각 프로그램에 대해 표준 파일이 열립니다 . 둘 다에 쓰고 stdout
기본적 stderr
으로 터미널에 출력됩니다.
로그 또는 오류 메시지를 실제 프로그램 출력과 혼합하지 않기 위해 stderr
대신 오류 및 로그 메시지를 기록하는 것이 일반적인 규칙입니다 . 예를 들어 다음을 사용하여 stdout
리디렉션할 수 있습니다 .stderr
2>
command 2> log