파이프가 stdout을 얻지 못함

파이프가 stdout을 얻지 못함

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
>

stdout다른 스트림에 쓰도록 Java 프로그램을 설정했지만 여전히 터미널에서 출력을 생성하는 것이 가능합니까 ? 그런 일이 가능합니까?

답변1

가지다각 프로그램에 대한 표준 파일 stdin(표준 입력), stdout(표준 출력) 및 stderr(표준 오류)를 엽니다. 기본적으로 둘 다 터미널에 작성 stdout되고 출력됩니다.stderr

stderr로그나 오류 메시지가 실제 프로그램 출력과 혼합되지 않도록 대신 오류와 로그 메시지를 작성하는 것이 stdout일반적인 규칙입니다 . 다음과 같은 stderr리디렉션을 사용할 수 있습니다 2>.

command 2> log

관련 정보