스크립트 출력 사본을 파일로 보내기


10

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

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

set -o xtrace

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

내 이해는 내가 할 경우

./my_script.sh > log.txt

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

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

내가 할 때 :

./my_script | tee log.txt

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


./my_script.sh > log.txt 2>&1
mikeserv 2016 년

script명령을 찾고있는 것 같습니다 . 또는 아마도myscript >&1 > log.txt 2>&1
스테판 Chazelas

답변:


12

스크립트가 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프로세스 로 리디렉션 합니다.


감사합니다-마지막 줄에 대해 왜 그렇지 ./myscript.sh >&1 2>&1 > log.txt않습니까? (즉, 마지막 두 리디렉션의 순서 전환). 그들 사이에 어떤 차이가 있습니까?
Amelio Vazquez-Reina

귀하의 변형에 출력하지 않습니다 stdout단지로, log.txt. 대답의 마지막 줄 (@ StéphaneChazelas에 의해 추가되고 자신이 아닌)은 두 가지 모두로 출력됩니다.
savanto

0

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

nohup myscript.sh & ; tail -f nohup.out
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.