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