이것을 실행하면 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
)