표준 출력 및 표준 오류를 로그에 복사하는 방법은 무엇입니까?

표준 출력 및 표준 오류를 로그에 복사하는 방법은 무엇입니까?

stderr 및 stdout에 쓰는 $LOG동시에 스크립트에서 콘솔에 인쇄해야 합니다.

스크립트에는 많은 명령이 있으므로 각 명령을 리디렉션하는 것은 좋은 해결책이 아닙니다.

이것을 시도했지만 예상대로 작동하지 않습니다.

#!/bin/bash

LOG=/var/tmp/log

#...

exec > $LOG  2>&1

내 목표는 stdout과 stderr에 작성하는 $LOG것뿐 아니라 (콘솔에서) stdout에도 작성하는 것입니다. 가능합니까?

답변1

사용. 예를 들어:

command 2>&1 | tee file.txt

commandSDTERR을 SDTOUT으로 리디렉션하여 작동합니다 . teeSTDIN을 STDOUT 및 파일로 복사합니다 file.txt.

Bash에서는 다음을 사용할 수 있습니다.프로세스 교체출력을 다음 위치에 복사합니다 $LOG.

exec &> >(tee $LOG)

그러나 이것은바시즘 작동하지 않습니다다른 껍질에.

답변2

이것이 가장 깨끗한 솔루션인지는 확실하지 않지만 저에게는 효과적이었습니다.

#!/bin/bash

LOG=/var/tmp/log

(
# lots of commands
# ...

) 2>&1 | tee $LOG

그러나 @sebasth는 더 나은 솔루션을 제공했습니다.

#!/bin/bash

LOG=/var/tmp/log

exec &> >(tee $LOG)

#...

관련 정보