$ program [arguments...] 2>&1 | tee outfile
2>&1
stderr 및 stdout 스트림을 덤프합니다.
tee outfile
스트림을 가져 와서 화면과 "outfile"파일에 씁니다.
이것은 아마도 대부분의 사람들이 찾고있는 것입니다. 아마도 일부 프로그램이나 스크립트가 오랫동안 열심히 일하고 많은 결과를 낳을 수 있습니다. 사용자는 정기적으로 진행 상태를 확인하고 출력을 파일에 기록하려고합니다.
문제는 (특히 stdout과 stderr 스트림을 혼합 할 때) 프로그램에 의해 플러시되는 스트림에 의존한다는 것입니다. 예를 들어 stdout에 대한 모든 쓰기가 플러시 되지 않지만 stderr에 대한 모든 쓰기 가 플러시되면 출력 파일 및 화면에서 시간 순서대로 종료됩니다.
프로그램이 진행 상황을보고하기 위해 몇 분마다 한두 줄만 출력하면 나쁘다. 이 경우 프로그램에서 출력을 플러시하지 않으면 몇 시간 동안 파이프를 통해 출력되는 것이 없기 때문에 사용자는 몇 시간 동안 화면에서 출력을 볼 수도 없습니다.
업데이트 : 패키지의 unbuffer
일부인 프로그램 expect
이 버퍼링 문제를 해결합니다. 이로 인해 stdout과 stderr이 화면과 파일에 즉시 기록되어 결합 및 리디렉션 될 때 동기화됩니다 tee
. 예 :
$ unbuffer program [arguments...] 2>&1 | tee outfile