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 &> >(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