Zsh 스크립트가 있고 출력을에 인쇄 STDOUT
하고 출력을 디스크의 파일로 복사 (덤프) 한다고 가정 해보십시오 .
또한 스크립트는 다음 옵션으로 시작합니다
set -o xtrace
이 명령은 장황하게 설명하고 실행하는 명령을 인쇄합니다. 디스크의 파일 에서이 출력을 캡처하고 싶습니다.
내 이해는 내가 할 경우
./my_script.sh > log.txt
그냥 보내드립니다 STDOUT
에 log.txt
,하지만 나는 또한 터미널에서 출력을 볼 수있게하려면?
Zsh tee
의 MULTIOS
옵션 과 옵션을 읽었 지만 사용법을 잘 모르겠습니다.
내가 할 때 :
./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
), 다음 파이프 stdout
로 tee
, 이는 그 단말에 복사 하고 로그 파일.
zsh
multios 동등한은 다음과 같습니다
./myscript.sh >&1 > log.txt 2>&1
즉, stdout을 원래 stdout 및 log.txt (내부적으로 파이프를 통해 작동하는 것으로 tee
)로 리디렉션 한 다음 stderr도 내부로 tee
프로세스 로 리디렉션 합니다.
답변
nohup은 콘솔이 죽거나 닫혀도 긴 백업 등에 유용하지만 작업을 계속 수행 할 수 있지만 여기서는 자동 로깅을 사용합니다.
nohup myscript.sh & ; tail -f nohup.out