파이프가 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
>

Java 프로그램이 가 아닌 다른 스트림에 쓰도록 설정할 수 있지만 stdout스트림은 여전히 ​​터미널에서 출력을 생성합니다. 그런 일이 가능합니까?

답변1

있다stdin(표준 입력), stdout(표준 출력) 및 stderr(표준 오류) 각 프로그램에 대해 표준 파일이 열립니다 . 둘 다에 쓰고 stdout기본적 stderr으로 터미널에 출력됩니다.

로그 또는 오류 메시지를 실제 프로그램 출력과 혼합하지 않기 위해 stderr대신 오류 및 로그 메시지를 기록하는 것이 일반적인 규칙입니다 . 예를 들어 다음을 사용하여 stdout리디렉션할 수 있습니다 .stderr2>

command 2> log

관련 정보