스크립트 출력 사본을 파일로 보내기 싶습니다. 내 이해는 내가 할

Zsh 스크립트가 있고 출력을에 인쇄 STDOUT하고 출력을 디스크의 파일로 복사 (덤프) 한다고 가정 해보십시오 .

또한 스크립트는 다음 옵션으로 시작합니다

set -o xtrace

이 명령은 장황하게 설명하고 실행하는 명령을 인쇄합니다. 디스크의 파일 에서이 출력을 캡처하고 싶습니다.

내 이해는 내가 할 경우

./my_script.sh > log.txt

그냥 보내드립니다 STDOUTlog.txt,하지만 나는 또한 터미널에서 출력을 볼 수있게하려면?

Zsh teeMULTIOS옵션 과 옵션을 읽었 지만 사용법을 잘 모르겠습니다.

내가 할 때 :

./my_script | tee log.txt

터미널에서 출력을 볼 수 있지만 파일은 log.txt모든 것을 캡처하는 것으로 보이지 않습니다 (사실 거의 아무것도 포착하지 못합니다).



답변

스크립트가 stdout및로 출력을 생성 하고 stderr해당 스트림 중 하나만 로그 파일로 출력하는 것일 수 있습니다 .

./my_script.sh | tee log.txt실제로 모든 것을 터미널에 출력하지만 stdout로그 파일 에만 덤프 합니다.

./my_script.sh > log.txt 2>&1 반대로 로그 파일에 모든 것을 덤프하지만 화면에는 아무것도 표시하지 않습니다.

트릭은 두 가지를 결합하는 것입니다 tee.

./myscript.sh 2>&1 | tee log.txt

이 리디렉션 stderr( 2로) stdout( 1), 다음 파이프 stdouttee, 이는 그 단말에 복사 하고 로그 파일.

zshmultios 동등한은 다음과 같습니다

./myscript.sh >&1 > log.txt 2>&1

즉, stdout을 원래 stdout 및 log.txt (내부적으로 파이프를 통해 작동하는 것으로 tee)로 리디렉션 한 다음 stderr도 내부로 tee프로세스 로 리디렉션 합니다.


답변

nohup은 콘솔이 죽거나 닫혀도 긴 백업 등에 유용하지만 작업을 계속 수행 할 수 있지만 여기서는 자동 로깅을 사용합니다.

nohup myscript.sh & ; tail -f nohup.out


답변