Linux 명령의 모든 출력, 오류, 경고 및 표시되는 순서를 캡처합니다.

Linux 명령의 모든 출력, 오류, 경고 및 표시되는 순서를 캡처합니다.

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이 옵션은 반드시 설정되어야 하며 에서는 기본값임):MULTIOSzsh

command >out 2>err &>all

관련 정보