![스크립트 출력을 화면에 유지하면서 파일에 기록하려면 어떻게 해야 합니까?](https://linux55.com/image/140072/%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%ED%99%94%EB%A9%B4%EC%97%90%20%EC%9C%A0%EC%A7%80%ED%95%98%EB%A9%B4%EC%84%9C%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%EA%B8%B0%EB%A1%9D%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
내 스크립트를 화면에 출력할 뿐만 아니라 해당 출력을 파일에 기록하도록 하려면 어떻게 해야 합니까? 사용자가 출력이나 다른 솔루션을 파이프하도록 요구하는 대신 스크립트에서 이 작업이 자동으로 수행되기를 바랍니다 tee
.
답변1
사용 tee
.
script.sh < inputfile | tee logfile
답변2
지정하지 않았으므로 이것이 bash 스크립트라고 가정합니다. man bash
(강조) 에 따르면 :
exec [-cl] [-a 이름] [명령어 [인수]]
명령이 지정되면 쉘을 대체합니다. 새로운 프로세스가 생성되지 않습니다. 이러한 매개변수는 명령의 매개변수가 됩니다. -l 옵션이 제공되면 쉘은 명령에 전달된 0번째 인수의 시작 부분에 대시를 배치합니다. 이것이 login(1)이 하는 일입니다. -c 옵션을 사용하면 명령이 빈 환경에서 실행됩니다. a가 제공되면 쉘은 이름을 실행된 명령의 0번째 인수로 전달합니다. 어떤 이유로 명령을 실행할 수 없는 경우 execfail 셸 옵션을 활성화하지 않으면 비대화형 셸이 종료됩니다. 이 경우 실패를 반환합니다. 파일을 실행할 수 없으면 대화형 셸은 실패를 반환합니다.명령이 지정되지 않으면 모든 리디렉션이 현재 셸에 적용됩니다., 반환 상태는 0입니다. 리디렉션 오류가 있는 경우 반환 상태는 1입니다.
그래서 당신은 사용할 수 있습니다프로세스 교체tee
파일 사본에 로깅을 실행 하고 표준 출력을 해당 파일로 리디렉션하여 tee
즉시 인쇄하고 기록하도록 합니다.
exec > >(tee /path/to/log-file)
stderr도 캡처하려면 stdout과 병합해야 합니다.
exec 2>&1
또는 다음을 사용하여 둘 다 캡처합니다.
exec &> >(tee /path/to/log-file)