Linux에서는 stdout과 stderr 또는 둘 다를 파일로 리디렉션할 수 있습니다. 예를 들어:
- stdout 및 stderr을 두 개의 파일로 리디렉션합니다.
command 1>out 2>err
.이 방법으로 출력과 오류를 두 개의 다른 파일로 분리할 수 있습니다. - stdout 및 stderr을 다음 파일로 리디렉션합니다.
command &>all
이렇게 하면 출력 및 오류 메시지가 나타나는 순서를 캡처할 수 있습니다.
command 1>out 2>err &>all
위의 두 명령을 결합하고 , 출력과 오류가 나타나는 순서를 캡처하고, 출력과 오류를 분리하고 싶습니다 . 그러나 위의 명령은 작동하지 않으며 out
파일 err
이 비어 있습니다. 순서를 바꾸면 파일 all
이 비어 있게 됩니다. 그렇다면 위의 두 명령을 원하는 대로 조합할 수 있는 방법이 없을까요?
답변1
조금 bash
까다롭습니다.
command 2> >(tee err) 1> >(tee out) | tee >all
여기에 우리가 필요합니다프로세스 교체 >(...)
그리고 tee
문제를 해결하세요. 프로세스 대체를 사용하면 tee
프로세스가 해당 채널에 연결됩니다. tee
그런 다음 이 줄을 파일에 씁니다.그리고그런 다음 에 인쇄합니다 STDOUT
. 따라서 파일에 쓴 후 STDERR
및 둘 다 STDOUT
에 인쇄됩니다 STDOUT
. 에서는 bash
하나의 명령으로 동일한 채널에 대해 여러 리디렉션을 사용할 수 없습니다. 그렇기 때문에 출력을 다시 파이프 tee
한 다음 인쇄해야 합니다.
이내( zsh
이 옵션은 반드시 설정되어야 하며 에서는 기본값임):MULTIOS
zsh
command >out 2>err &>all