누군가 이 명령에서 무슨 일이 일어나고 있는지 설명할 수 있습니까?
echo foo >&2 | grep foo
Zsh(5.0.2)는 foo
두 번 인쇄합니다. 다음 명령을 실행한 이후 하나는 표준 출력으로 나타나고 다른 하나는 표준 오류로 나타납니다.
{ echo foo >&2 | grep foo } >/dev/null
그리고:
{ echo foo >&2 | grep foo } 2>/dev/null
둘 다 foo
한 번만 인쇄됩니다.
답변1
이것이 효과다다수의.
echo foo >&2 | grep foo
foo
stderr 에 기록되고 foo
으로 파이프됩니다 grep
. stderr는 기본적으로 터미널에 연결되므로 각각 foo
에서 하나, echo
결과에서 하나, 두 줄이 표시됩니다 grep
.
{ echo foo >&2 | grep foo } >/dev/null
stdout이 로 리디렉션되었기 때문에 여기에 줄이 표시됩니다 . 의 줄만 /dev/null
표시됩니다 .foo
echo
{ echo foo >&2 | grep foo } 2>/dev/null
여기서는 stderr이 로 리디렉션되었기 때문에 한 줄을 볼 수 있으며 , 의 줄만 /dev/null
볼 수 있습니다 .foo
grep
라인 출력 색상으로 터미널의 차이를 쉽게 알 수 있습니다. grep
일치하는 패턴이 강조 표시됩니다(또는 강제로 사용할 수 있음 --color=always
).
MULTIOS
기본적으로 활성화되어 있지만 nomultios
옵션이 설정되어 있지 않습니다.
$ unsetopt | grep nomultios
nomultios
비활성화하려면 nomultios
다음 옵션을 설정하십시오.
$ setopt nomultios