내 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