stderr 출력 필터링을 포함하는 가능한 POSIX 스크립트가 있습니다.
exec <cmd> "$@" 2> >(grep -v "blih bluh blah")
프로세스 교체가 정의되지 않았으므로(예: [SC3001]) 리디렉션이 발생하지 않습니다. 나는 파일 설명자를 가지고 놀면서 이것을 보았습니다.우편 엽서및 기타 측면이 있지만 다음이 무엇을 의미하는지 잘 모르겠습니다.
exec <cmd> "$@" 2>/dev/fd/5; exec grep -v "blih bluh blah" 5<&- >&2
아마도
exec <cmd> "$@" 2>/dev/fd/5 && grep -v "blih bluh blah" 5<&- >&2
비판적인 눈을 환영합니다.
편집하다:내 의도는 아마도 다음에 더 가깝습니다.
exec {<cmd> "$@"; grep -v "blah" /dev/fd/5 5<&- >&2} 5<&2
여기서는 적어도 두 가지 문제를 느낄 수 있습니다.(나)grep은 ";" 다음에 표시된 대로 비동기적으로 실행됩니다.(둘)지정된 리디렉션 방법은 stderr
현재 쉘 실행 환경에 영향을 미칩니다.
또한 위 식 exec
뒤에는 명령어가 나오므로 새로운 프로세스를 생성하지 않고 <cmd>로 쉘을 교체한다. POSIX 매뉴얼 페이지에서는 인수가 지정되면 해당 인수가 <cmd>에 대한 인수로 해석되도록 지정합니다. 하지만 그게 전부인가요 "$@"
?
어떻게 exec
처리하나요 exec {<cmd1>; <cmd2>} 5<&2
?