명령의 stderr 스트림을 로그 파일에 저장하고 싶지만 전체 출력 (stdout + stderr)도 화면에 표시하고 싶습니다. 어떻게 할 수 있습니까?
콘솔에 stdout + stderr을 표시하고 두 스트림을 파일로 리디렉션하는 솔루션 만 찾았습니다.
foo | tee output.file
( https://stackoverflow.com/questions/418896/how-to-redirect-output-to-a-file-and-stdout )
하지만 stderr을 로그 파일로 리디렉션하고 싶습니다.
최근 bash에서는 프로세스 대체를 사용할 수 있습니다.
foo 2> >(tee stderr.txt)
이것은 tee를 실행하는 프로그램에 stderr을 보냅니다.
더 이식성
exec 3>&1
foo 2>&1 >&3 | tee stderr.txt
이렇게하면 파일 설명자 3이 현재 표준 출력 (예 : 화면)의 복사본이 된 다음 파이프를 설정하고 실행 foo 2>&1 >&3
합니다. 이것은 foo의 stderr을 현재의 stdout (파이프)과 같은 위치로 보낸 다음 stdout을 원래 출력 인 fd 3으로 보냅니다. 파이프는 foo의 원본 stderr를 tee에 공급하여 파일에 저장하고 화면으로 보냅니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다