출력을 여러 로그 파일로 리디렉션하는 방법

출력을 여러 로그 파일로 리디렉션하는 방법

표준 출력을 여러 로그 파일로 리디렉션하는 방법은 무엇입니까? 다음은 작동하지 않습니다:

some_command 1> output_log_1 output_log_2 2>&1

답변1

바라보다 man tee:

이름: tee - 표준 입력에서 읽고 표준 출력 및 파일에 씁니다.

요약: 티셔츠 [옵션]...[파일]...

그러므로:

echo test | tee file1 file2 file3

답변2

오래된 글인데 이제서야 발견했네요...

> /dev/null출력을 다음으로 리디렉션하는 대신:

echo "foobarbaz" | tee file1 > file2

또는 추가 출력:

echo "foobarbaz" | tee -a file1 >> file2

답변3

출력이 다음 함수에 의해 생성된다고 가정합니다 cmd().

cmd() {
    echo hello world!
}

출력을 두 개의 파일로 리디렉션하고 cmd콘솔로는 리디렉션하지 않으려면 다음을 사용할 수 있습니다.

cmd | tee file1 file2 >/dev/null

tee에 파이프된 데이터 소스가 있는 경우 여러 파일에 대해 작동합니다.

echo "foobarbaz" | tee file1 file2 file3 file4 > /dev/null

이것은 또한 작동합니다:

echo $(cmd) | tee file1 file2 >/dev/null

리디렉션이 없으면 /dev/nulltee는 출력을 stdout으로 보냅니다.또한지정된 파일에.

예를 들어 콘솔에서 실행하면 해당 콘솔에 출력이 표시됩니다. crontab에서 실행하면 출력에 메일로 전송된 상태 메시지가 표시됩니다(여기서 Gilles의 답변 참조).https://unix.stackexchange.com/a/100833/3998).

이는 Ubuntu 12.04의 bash에서 작동했으며 GNU bash 4.3.11(1)을 사용하여 Ubuntu 14.04에서 확인되었으므로 최신 GNU bash 버전에서도 작동합니다.

답변4

답변 아래의 의견에서 @jofel이 언급했듯이 이 작업은 로컬에서 수행할 수 있습니다 zsh.

echo foobar >file1 >file2 >file3

또는 중괄호 확장을 사용하십시오.

echo foobar >file{1..3}

tee내부적으로 이것은 위에 제공된 답변과 매우 유사합니다. 쉘은 명령의 표준 출력을 여러 파일로 파이프하는 프로세스에 연결하므로 그렇게 하는 데에는 기술적인 이점이 없습니다.하다정말 좋아 보인다). 바라보다zsh수동더 알아보기.

관련 정보