스크립트 출력을 화면에 유지하면서 파일에 기록하려면 어떻게 해야 합니까?

스크립트 출력을 화면에 유지하면서 파일에 기록하려면 어떻게 해야 합니까?

내 스크립트를 화면에 출력할 뿐만 아니라 해당 출력을 파일에 기록하도록 하려면 어떻게 해야 합니까? 사용자가 출력이나 다른 솔루션을 파이프하도록 요구하는 대신 스크립트에서 이 작업이 자동으로 수행되기를 바랍니다 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)

관련 정보