로그 파일에 대한 exec 및 tee: 이러한 bash 명령 설명

로그 파일에 대한 exec 및 tee: 이러한 bash 명령 설명

내 Bash 스크립트 파일 상단에 다음이 표시됩니다.

export LOGFILE=$LOGDIRECTORY/${SCRIPT_NAME}.log
exec > >(tee $LOGFILE)
exec 2>&1

그것은 무엇을 합니까? 여기서 두 개의 exec 프로세스는 무엇을 하고 있나요? 이렇게 유지하면 스크립트 실행의 모든 ​​출력이 파이프로 연결된다는 것을 알고 있지만 명령문 관점에서 이해하고 $LOGFILE싶습니다 .exec

답변1

셸에서는 exec1) 파일 열기 및 리디렉션 2) 실제 exec작업(현재 프로세스 이미지를 다른 프로세스 이미지로 교체)을 수행합니다.

리디렉션 exec입니다.

먼저, 설명자(1)를 exec 1> >(tee $LOGFILE)동시에 실행 중인 프로세스(프로세스에 첫 번째 매개변수가 있음) stdout에 연결된 프로세스 교체로 생성된 파이프로 리디렉션한 다음 설명자(2)를 설명자로 리디렉션하여 이제 동일한 위치 ( 티 파이프).tee$LOGFILEstderr1

stdout파일 설명자는 상속된다는 점을 기억하세요. 모든 future 와 stderr출력을 process로 보냈고 프로세스는 파일 설명자 1이 원래 가리키는 곳(아마도 터미널) tee에 이를 기록합니다 .$LOGFILE


노트: /searching에서 알 수 있듯이 tee 프로세스는 원시 stdout(=raw 파일 설명자 1)으로 출력됩니다.큰 타격(1)~을 위한간단한 명령 확장그리고프로세스 교체>() <(), 리디렉션(및 기타 확장)이 수행되기 전에 프로세스 대체( )가 발생합니다. 이는 리디렉션이 exec 1> >(tee "$LOGFILE")발생함 을 의미합니다.뒤쪽에 teetee상위 셸에서 상속된 동일한 파일 설명자 1 로 시작되었습니다 . (반대의 경우 tee자체 입력을 작성하므로 IO 모드에 따라 교착 상태가 발생할 수 있습니다.)

관련 정보