![linux +는 로그와 콘솔에 표준 출력과 표준 오류를 기록합니다.](https://linux55.com/image/132064/linux%20%2B%EB%8A%94%20%EB%A1%9C%EA%B7%B8%EC%99%80%20%EC%BD%98%EC%86%94%EC%97%90%20%ED%91%9C%EC%A4%80%20%EC%B6%9C%EB%A0%A5%EA%B3%BC%20%ED%91%9C%EC%A4%80%20%EC%98%A4%EB%A5%98%EB%A5%BC%20%EA%B8%B0%EB%A1%9D%ED%95%A9%EB%8B%88%EB%8B%A4..png)
로그=/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
.