다양한 명령을 호출하고 일부 출력을 인쇄하는 bash 스크립트가 있습니다(예를 들어 자체적으로 호출되는 명령 git pull
과 스크립트 자체에서 생성된 정보 메시지 모두 Operation took XX minutes
).
전체 출력을 파일로 캡처하고 싶습니다.스크립트 자체에서./myscript.sh | tee file.txt
:기본적으로 전화를 걸 필요가 없도록 하고 싶습니다.여기서는 관련이 없습니다이유.
기본적으로 나는 다음과 같은 작업을 수행하고 싶습니다.
startCapture
git pull
echo "Text"
other-command
endCapture
또한 스크립트가 실행되는 동안 출력이 셸에 인쇄되어야 합니다.
궁극적인 목표는 다음과 같습니다.
./myscript.sh
실행하는 데 추가 셸 구조가 필요하지 않습니다.- 지금 하고 있는 것처럼 터미널의 출력을 살펴보세요.
- 전체 출력을 포함하는 디스크에 파일 가져오기
가능합니까?
답변1
언제든지 script
스크립트 내에서 호출하여 모든 것을 기록할 수 있습니다.
bash 스크립트에서 모든 것을 동시에 인쇄하고 로깅하는 경우 log.txt
:
#!/bin/bash
if [ -z "$SCRIPT" ]
then
/usr/bin/script log.txt /bin/bash -c "$0 $*"
exit 0
fi
echo teste
로그를 확인하세요 log.txt
.
$ ./a.sh
Script started, output file is log.txt
teste
Script done, output file is log.txt
$ cat log.txt
Script started on Fri Feb 16 17:57:26 2018
command: /bin/bash -c ./a.sh
teste
Script done on Fri Feb 16 17:57:26 2018
답변2
세션의 모든 출력을 캡처하는 방법은 새 bash 세션을 시작하고 로그 파일로 보내는 것입니다. 단순한 스크립트 이상의 것을 추적하는 데 정말 유용합니다.
bash | tee ~/bash.log #bash 세션이 끝날 때까지 표준 출력을 저장합니다. bash 2>&1 | bash 2>&1 | tee ~/bash.log #이것은 bash 세션이 끝날 때까지 오류를 포함한 모든 출력을 저장합니다.
아니면 직접 스크립트를 작성할 수도 있습니다.
./myscript.sh | tee ./myscript.log #this will log only the output of the script.
답변3
당신은 사용하고 싶어티.
전임자:
echo "Hello World" | tee out.txt
그러면 명령 출력이 포함된 out.txt 파일이 생성되어 화면에 인쇄됩니다. 파일에 추가하려면 "tee -a filename"을 사용하십시오.
echo "Hello" | tee -a out.txt
echo "World" | tee -a out.txt
out.txt에는 Hello와 World라는 두 줄이 있습니다(-a가 없으면 world만 있음).
전체 스크립트를 저장하고 전체 스크립트를 출력하려면 다음을 수행하십시오.
./script.sh | tee output.txt