요약 : (bash 및 zsh)
$ cmd 2> >(stderr-filter >&2)
예:
% cat /non-existant 2> >(tr o X >&2)
cat: /nXn-existant: NX such file Xr directXry
%
StackExchange 네트워크에 대한 많은 답변의 형식은 다음과 같습니다.
cat /non-existant 3>&1 1>&2 2>&3 3>&- | sed 's/e/E/g'
여기에는 내장 된 가정이 있습니다. 파일 설명자 3은 다른 용도로 사용되지 않습니다.
대신 명명 된 파일 설명자를 사용하고 사용 {ba,z}sh
가능한 다음 파일 설명자> = 10을 할당합니다.
cat /non-existant {tmp}>&1 1>&2 2>&$tmp {tmp}>&- | sed 's/e/E/g'
명명 된 파일 설명자는 POSIX에서 지원되지 않습니다 sh
.
위의 다른 문제는 STDOUT 및 STDERR을 원래 값으로 다시 바꾸지 않고는 명령을 추가 명령으로 파이프 할 수 없다는 것입니다.
POSIX에서 진행되는 파이핑을 허용하려면 sh
(그리고 여전히 FD 3이 사용되지 않는다고 가정) 복잡해집니다 .
(cmd 2>&1 >&3 3>&- | stderr-filter >&2 3>&-) 3>&1
따라서 이것에 대한 가정과 문법을 감안할 때 위의 TL; DR에 표시된 더 간단한 bash
/ zsh
구문을 사용하는 것이 더 나을 것 입니다.