bash IO 리디렉션, du dup() STDERR 방법?

bash IO 리디렉션, du dup() STDERR 방법?

다음 예를 고려하십시오.

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.

관련 정보