배쉬에서:
$ echo hi 2>&1 1>/dev/null | cat
$
zsh에서:
$ echo hi 2>&1 1>/dev/null | cat
hi
$
표준 출력을 리디렉션하는 동안 표준 오류만 파이프하는 방법이 있습니까?
답변1
zsh를 사용하고mult_ios
옵션다음 위치에서 열기(기본적으로 열기)
echo hi 2>&1 1>/dev/null | cat
1> /dev/null | cat
stdout의 다중 리디렉션 으로 처리됩니다 .echo
따라서 echo
stdout은 이제 /dev/null
파이프와 파이프 모두로 리디렉션됩니다 cat
(를 사용하는 것과 마찬가지로 tee
).
여러 리디렉션을 취소하려면 다음을 수행하세요.
echo hi 2>&1 >&- > /dev/null | cat
즉, 리디렉션하기 전에 표준 출력을 닫습니다(파이프 취소)./dev/null
또는 명령 그룹이나 하위 쉘을 사용하십시오. 예를 들면 다음과 같습니다.
{echo hi 2>&1 1>/dev/null} | cat
(echo hi 2>&1 1>/dev/null) | cat
이렇게 하면 echo
stdout은 명시적으로만 리디렉션됩니다.한 번(파이프 리디렉션은 그룹/서브쉘에 적용되며 상속됩니다 echo
.)
또는 multios
완전히 비활성화할 수도 있습니다.
(set +o multios; echo hi 2>&1 > /dev/null | cat)
또는 다음을 사용할 수 있습니다.프로세스 교체파이프 대신:
echo hi 2> >(cat) > /dev/null
그러나 작업 제어가 꺼지면(스크립트에서와 같이) 프로세스가 cat
비동기식으로 실행됩니다(마치 시작된 것처럼 &
).