로그=/tmp/log.txt
다음 구문은 모든 표준 출력과 표준 오류를 log.txt 파일에 기록합니다.
실행 > $log 2>&1
우리가 원하는 것은 stdout과 stderr을 log.txt에 쓰고, stdout + stderr을 콘솔에 쓰는 것입니다.
가능합니까?
답변1
이 작업을 수행하는 더 쉬운 방법이 있을 수 있지만 일반적인 해결 방법은 다음과 같습니다.
#!/bin/bash
trap 'rm $TMP' 0
TMP=$(mktemp)
rm $TMP
mkfifo $TMP
tee < $TMP ${log:-/tmp/log.txt} &
exec > $TMP 2>&1
다른 모든 프로세스가 fifo에서 읽거나 쓸 수 있기 때문에 여기에는 큰 보안 및 안정성 문제가 있다는 것은 말할 필요도 없습니다. 이런 종류의 작업을 수행하려면 스크립트 출력을 tee
.