zsh에 multios가 존재할 때 '&> word'와 '> word 2>&1'의 차이점은 무엇입니까?

zsh에 multios가 존재할 때 '&> word'와 '> word 2>&1'의 차이점은 무엇입니까?

~처럼수동설명하다:

이는 여러 운영 체제가 있는 경우 " "와 다른 효과가 있다는 점에 유의하십시오 > word 2>&1(아래 섹션 참조).

하지만 멀티오스 부분을 읽은 후에도 둘 사이의 차이점을 여전히 알 수 없습니다. 누구든지 예를 들어 줄 수 있습니까?

답변1

문제는 각 인스턴스로 2>&1인해 stderr이 이미 완료된 stdout으로 다시 리디렉션된다는 것입니다. 이 예를 참조하세요다중 운영체제 부분:

그러나 다음 사항을 고려하십시오.

date >output >&1

리디렉션은 순차적으로 평가되므로 >&1발생하면 표준 출력이 파일 출력으로 설정되므로 출력의 또 다른 복사본이 해당 파일로 전송됩니다. 이것은 우리가 원하는 것이 아닐 것 같습니다.

그리고 구체적인 문제를 설명하는 예를 들어보세요.

% (echo foo; echo bar >&2) &> baz &> baz2
% head baz baz2
==> baz <==
foo
bar

==> baz2 <==
foo
bar

여기에서 각 줄은 각 파일에 한 번씩 표시되는데, 이는 아마도 이러한 리디렉션의 목적일 것입니다.

> word 2>&1그러나 다음으로 직접 바꾸십시오 &> word.

% (echo foo; echo bar >&2) > baz 2>&1 > baz2 2>&1
% head baz baz2
==> baz <==
foo
bar
bar

==> baz2 <==
foo
bar

첫 번째 파일로 전송된 추가 stderr 복사본을 확인하세요.

따라서 등가물 &> word1 &> word2 &> word3 ...은 실제로 > word1 > word2 > word3 ... 2>&1.

관련 정보