프로그램의 출력을 리디렉션하고 여전히 stdout으로 이동시키는 방법이 있습니까?


24

괜찮아. 프로그램의 출력을 파일로 리디렉션하려면 다음과 같이하십시오.

prog > file

stdout과 stderr을 해당 파일로 리디렉션하려면 다음을 수행하십시오.

prog > file 2>&1

출력이 파일로 이동하기를 원한다면 이것은 모두 훌륭합니다. 그러나 출력을 파일로 보내고 여전히 stdout / stderr로 가려면 어떻게해야합니까? 따라서 출력은 파일에 저장되지만 프로그램이 실행되는 동안 콘솔에서 계속 볼 수 있습니다. 그렇게 할 방법이 있습니까? 그렇다면 어떻게?


용어 : 당신은 말 그대로 터미널로갑니다 . stdout파일 설명자 1이며, foo > some_file쓰기 전용 파일 설명자가 열린 some_filefoo의 표준 출력 임을 의미합니다 . stdout은 항상 stdout으로갑니다.
Peter Cordes

답변:


39

tee이 목적을 위해 존재한다; 파일 이름 인수를 사용하여 stdin에서 읽은 데이터를 stdout과 파일 모두에 씁니다.

$ prog 2>&1 | tee file

10
그리고 여분의 bash 4 귀여움을 위해 : prog |& tee file.
Tobu

1
'file'을 명명 된 파이프로 바꿀 수도 있습니다.
Kevin Cantu

@KevinCantu : 명명 된 파이프는 파일 형식 중 하나 일뿐입니다. 이것은 모든 것이 파일 인 Unix입니다. 또한 prog |& tee /dev/tty > file파이프 라인 중간에 유용 할 수 있습니다 (예 : foo |& tee /dev/tty | sed 's/.*\r//' > foo.log터미널에서 상태 행 진행률 업데이트를 확인하지만 로그 파일에서 필터링). 또는이 시점에서 데이터를 볼 수 있도록 해킹중인 파이프 라인을 디버깅하는 데 사용하십시오.
Peter Cordes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.