MULTIOS 리디렉션에서는 무슨 일이 일어나고 있나요?

MULTIOS 리디렉션에서는 무슨 일이 일어나고 있나요?

이것을 실행하면 1>&2 echo hi |& grep hi색상이 없는 hi가 표시되고 새 줄에 빨간색 hi가 표시됩니다. 이는 와 동일한 출력입니다 1>&2 echo hi | grep hi. 전자의 두 "안녕"이 빨간색이 아닌 이유는 무엇입니까?

답변1

첫 번째 파이프라인:

1>&2 echo hi |& grep hi

이는 다음과 관련이 있습니다.

echo hi 1>&2 2>&1 | grep hi

|&와 동일하기 때문입니다 2>&1 |.

쉘 옵션이 설정되면 MULTIOS출력이 echo표준 오류로 복사됩니다. 이는 이전에 본 적이 없는 hi무색의 물체를 생성합니다 grep. 다른 하나는 hi통과하여 grep착색됩니다.

2>&1표준 오류로의 출력이 없기 때문에 리디렉션은 아무 작업도 수행하지 않습니다 echo. 예를 들어 다음과 같은 경우 상황은 다릅니다.

{ echo hi 1>&2; } 2>&1 | grep hi

또는

{ echo hi 1>&2; } |& grep hi

표준 출력은 어디에 echo있습니까?아니요가 복사되고 의 표준 오류가 { ...; }로 전송되어 grep단일 색상이 생성됩니다 hi.

두 번째 파이프,

1>&2 echo hi | grep hi

또는,

echo hi 1>&2 | grep hi

(이는 무작동 리디렉션을 위한 첫 번째 파이프를 제거하는 것과 같습니다. 2>&1) 또한 표준 출력을 두 번 리디렉션합니다. 한 번은 표준 오류(색상 없음 hi)로, 한 번은 파이프(색상 있음 hi)로 리디렉션합니다.

두 가지 색상의 경우 hi:

echo hi 2>&1 1>&2 | grep hi

또는

echo hi 1>&1 | grep hi

(저는 쉘에 익숙하지 않기 때문에 약간의 흔들림이 필요합니다 zsh)

관련 정보