exec 및 tee를 사용하여 로그를 stdout 및 로그 파일로 동시에 리디렉션

exec 및 tee를 사용하여 로그를 stdout 및 로그 파일로 동시에 리디렉션

Bash 스크립트에서 모든 표준 출력을 로그 파일로 리디렉션하고 tee화면에 출력하는 방법은 무엇입니까 exec?

log_file="$HOME/logs/install.txt-`date +'%Y-%m-%d_%H-%M-%S'`"
[ -f "$log_file" ] || touch "$log_file"
exec 1>> $log_file 2>&1

이 코드는 모든 로그를 로그 파일로 리디렉션하지만 화면으로는 리디렉션하지 않습니다.

답변1

사용프로세스 교체그리고&리디렉션그리고exec:

exec &> >(tee -a "$log_file")
echo "This will be logged to the file and to the screen"

$log_file스크립트의 출력과 모든 하위 프로세스가 포함되며 출력도 화면에 인쇄됩니다.

  • >(...)프로세스를 시작 ...하고 표준 입력을 나타내는 파일을 반환합니다.

  • exec &> ...표준 출력 및 표준 오류를 ...스크립트의 나머지 부분으로 리디렉션합니다( exec > ...표준 출력에만 해당).

  • tee -a표준 입력을 파일에 추가하고 화면에 인쇄합니다.

답변2

exec >> $log_file 2>&1 && tail $log_file

관련 정보