스크립트의 모든 출력을 파일로 캡처합니다(스크립트 자체에서).

스크립트의 모든 출력을 파일로 캡처합니다(스크립트 자체에서).

다양한 명령을 호출하고 일부 출력을 인쇄하는 bash 스크립트가 있습니다(예를 들어 자체적으로 호출되는 명령 git pull과 스크립트 자체에서 생성된 정보 메시지 모두 Operation took XX minutes).

전체 출력을 파일로 캡처하고 싶습니다.스크립트 자체에서./myscript.sh | tee file.txt:기본적으로 전화를 걸 필요가 없도록 하고 싶습니다.여기서는 관련이 없습니다이유.

기본적으로 나는 다음과 같은 작업을 수행하고 싶습니다.

startCapture

git pull

echo "Text"

other-command

endCapture

또한 스크립트가 실행되는 동안 출력이 셸에 인쇄되어야 합니다.

궁극적인 목표는 다음과 같습니다.

  1. ./myscript.sh실행하는 데 추가 셸 구조가 필요하지 않습니다.
  2. 지금 하고 있는 것처럼 터미널의 출력을 살펴보세요.
  3. 전체 출력을 포함하는 디스크에 파일 가져오기

가능합니까?

답변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

관련 정보