리디렉션에도 불구하고 프로그램이 표준 출력에 로그를 쓰도록 하려면 어떻게 해야 합니까?

리디렉션에도 불구하고 프로그램이 표준 출력에 로그를 쓰도록 하려면 어떻게 해야 합니까?

배경

오늘 저는 다음 명령을 사용하여 perconna의 innobackupex를 시험해 보았습니다.

innobackupex --stream=xbstream /root/backup/ > /root/backup/backup.xbstream

그러나 내 터미널에 로그가 표시되는 것을 확인했습니다.

...
IMPORTANT: Please check that the backup run completes successfully.
           At the end of a successful backup run innobackupex
           prints "completed OK!".

230202 15:52:24 Connecting to MySQL server host: 127.0.0.1, user: root, password: set, port: 3306, socket: not set
...

어찌할 바를 모르는

리디렉션이 >표준 출력을 /root/backup/backup.xbstream에 기록하면 안 되나요? 터미널에서 로그를 계속 볼 수 있는 이유는 무엇입니까?

답변1

Unix 계열 시스템의 프로세스에는 서로 다른 오류 출력 스트림과 처리된 데이터 스트림이 stderr있습니다 stdout. 이러한 분리는 경고 및 오류 메시지가 출력 데이터의 형식을 방해하는 것을 방지하기 위해 수행됩니다(예: 파이프를 통해 전달되는 경우).

# redirect the command output, but omit warnings and errors
# (these will end up on stderr, which is written to the console by default)
mycommand > /some/path/myfile

# redirect warnings and errors only
mycommand 2> /some/path/myfile

# redirect both
mycommand &> /some/path/myfile

인용하다리디렉션에 대한 GNU 공식 Bash 문서각 스트림 리디렉션에 대한 자세한 내용

관련 정보