표준 출력을 여러 로그 파일로 리디렉션하는 방법은 무엇입니까? 다음은 작동하지 않습니다:
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/null
tee는 출력을 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
수동더 알아보기.