다음 예를 고려하십시오.
exec 10>&2 # duplicate STDERR to fd 10
{ echo ok; inexistantcommand; } > /tmp/both 2>&1 10>/tmp/err
exec 10>&- # close fd 10
/tmp/err에 오류가 있을 것으로 예상했지만 비어 있습니다.
$ cat /tmp/both
ok
-bash: inixistantcommand: command not found
$ cat /tmp/err
$
내가 뭘 잘못했나요?
편집하다:
시험을 마친:
{ echo ok; qsdfghjk; } &> >(tee /tmp/both) 2>/tmp/err
하지만 /tmp/에는 둘 다 있습니다.STDOUT
답변1
이는 파일 설명자를 복사하는 것이 아니라 스트림에서 데이터를 복사하는 것 같습니다. 데이터 흐름이 복제됩니다 tee
.
{ echo ok; this is an error; } 2> >(tee err.log) | cat >both.log
그러면 ok
문자열과 오류 메시지가 기록되고 both.log
오류 메시지도 기록됩니다 err.log
.
오류 메시지는 tee
복합 명령의 리디렉션된 오류 스트림에서 표준 입력 스트림의 오류 메시지를 읽는 에 의해 복사됩니다. 이 tee
유틸리티는 모든 입력을 지정된 파일 및 표준 출력 스트림에 기록합니다. 복합 명령 및 of 의 표준 출력 tee
은 로 파이프되어 cat
작성 됩니다 both.txt
.