linux +는 로그와 콘솔에 표준 출력과 표준 오류를 기록합니다.

linux +는 로그와 콘솔에 표준 출력과 표준 오류를 기록합니다.

로그=/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.

관련 정보