bash + 두 개의 로그에 표준 출력 및 오류 쓰기

bash + 두 개의 로그에 표준 출력 및 오류 쓰기

내 bash 스크립트에서는 다음을 사용하여 stdout 및 stderr에서 log.txt까지 모든 것을 작성합니다.

export LOG=/tmp/installation/log.txt

exec > $LOG 2>&1

그래서 모든 것이 기록됩니다/tmp/installation/log.txt

하지만 두 개의 서로 다른 로그 경로에 쓰는 방법

동일한 stdout 및 stderr을 2개의 로그 파일에 쓰고 싶다고 가정해 보겠습니다.

그렇다면 이 경우 구문은 무엇입니까?

export LOG=/tmp/installation/log.txt
export LOG_I=/tmp/installation/log_info.txt

따라서 두 로그 모두 동일한 내용을 갖게 됩니다.

우리가 이것을 할 수 있나요?

export LOG=/tmp/installation/log.txt
export LOG_I=/tmp/installation/log_info.txt

exec > $LOG $LOG_I 2>&1

답변1

주문

exec > $LOG $LOG_I 2>&1

와 관련되어 있기 때문에 그다지 효율적이지 않습니다.

exec $LOG_I > $LOG 2>&1

즉, exec인용되지 않은 확장에 의해 제공된 명령을 시도합니다 $LOG_I.


데이터를 여러 파일에 저장하려면 복사해야 합니다. 이것은 으로 이루어집니다 tee.

예를 들어,

log1="/tmp/logfile-1.txt"
log2="/tmp/logfile-2.txt"

exec > >( tee "$log1" >"$log2" ) 2>&1

tee이는 프로세스 대체를 사용하여 표준 출력 스트림을 호출합니다 . 유틸리티 tee는 입력을 받아 에 저장한 $log1다음 복사본을 로 리디렉션합니다 $log2( tee항상 표준 출력에 입력 복사본을 생성하지만 이를 사용할 수도 있음 tee "$log1" "$log2" >/dev/null). 그런 다음 표준 오류 스트림을 표준 출력과 동일한 위치로 리디렉션하여 tee동일한 방식으로 복사할 수 있습니다.

도착하다추가의두 개의 로그에 대해 다음을 사용합니다.

exec > >( tee -a "$log1" >>"$log2" ) 2>&1

관련 정보