STDOUT 및 STDERR 중 하나를 리디렉션하지 않고 (현재 날짜와 같은) 내용을 인쇄하고 싶습니다.
나는 시도했다:
date 1>&2
하지만 이것은 단지 stdout을 stderr로 리디렉션하는 것 같은데, 이는 내가 원하는 것이 아닙니다. 동일한 파일에 병합하지 않고 둘 다 인쇄하고 싶습니다.
도움이 될 것이라고 확신 tee
하지만 어떻게 사용하는지 모르겠습니다.
답변1
원하는 것이 무엇인지 이해한다면 tee
다음 명령이 해결책입니다.
your_command 2>&1 | tee /dev/stderr
명령의 출력(즉,errors date
)은 표준 출력(사용)으로 리디렉션됩니다 2>&1
. 명령을 사용하면 결과가 두 배가 됩니다 tee
.
- 1을 표준 출력으로;
- 매개변수의 두 번째 파일:
/dev/stderr
그런 다음 명령의 결과는 다음 date
과 같습니다.
> date 2>&1 | tee /dev/stderr
Sun Dec 11 16:33:35 CET 2022
Sun Dec 11 16:33:35 CET 2022
따라서 >
/ >>
및 /를 사용하여 원하는 파일로 2>
리디렉션 할 수 있습니다.2>>
> date 2>&1 | tee /dev/stderr >file1 2>file2
> cat file1
Sun Dec 11 16:40:59 CET 2022
> cat file2
Sun Dec 11 16:40:59 CET 2022
오류가 발생하면 잘못된 명령을 사용하십시오. 예 datex
:
> datex 2>&1 | tee /dev/stderr >file1 2>file2
> cat file1
bash: datex: command not found...
> cat file2
bash: datex: command not found...
답변2
zsh
, 이건 그냥
date >&1 >&2
zsh에서 multios
이 옵션을 비활성화하지 않는 한 fd가 출력을 위해 여러 번 리디렉션되면 zsh는 이를 파이프로 리디렉션하고 다른 쪽 끝에서 데이터를 읽어 tee
유사한 방식으로 대상으로 디스패치합니다.
다른 쉘에서는 다음과 함께 제공할 수 있습니다 perl
.
date | perl -ne 'BEGIN{$/=\8192} print; print STDERR'
Cygwin 및 Linux 기반 시스템 이외의 시스템에서는 다음을 수행할 수 있습니다.
date | tee /dev/stderr
이는 Linux/Cygwin에서는 피해야 합니다. 열기는 /dev/stderr
/dev/stderr이 가리키는 파일을 다시 열려고 시도하고 결과 파일 설명자에 쓰는 것이 stderr에 쓰는 것과 다릅니다. 그러나 stderr이 파이프나 tty 장치(일반적으로 그렇습니다)에서 열리면 기능적으로 동일해야 합니다.
1 파이프가 포함되어 있다는 점에 유의하세요 cmd >&2 | cmd2
. 이는 다소 놀랄 수 있습니다.