답변:
유닉스 계열 시스템에는 수정되지 않은 상태로두면 출력이 화면에 전송되는 두 개의 출력 경로가 있습니다. 표준 오류 (또는 표준 오류)는 대부분의 오류와 오류 조건을 캡처하는 오류입니다.
stderr의 권한 거부 메시지를 "일반 출력"과 동일한 출력 스트림으로 전달하려면 둘을 결합해야합니다. 예를 들어, grep -v
제대로 작동 하기 위해 stdout (표준 출력)과 stderr을 비전 구문과 결합합니다.
에서 GNU 배쉬 매뉴얼 섹션 3.2.2 파이프 라인 :
'
|&
'를 사용하면 표준 출력과 함께 command1 의 표준 오류 가 파이프를 통해 command2 의 표준 입력에 연결됩니다 . 에 대한 속기입니다2>&1 |
. 표준 오류를 표준 출력으로 암시 적으로 재지 정하는 것은 명령에 의해 지정된 재 지정 후에 수행됩니다.
또한 geirha가 지적했듯이 stderr 출력을 제거하려면 다음과 같은 작업을 수행하십시오.
find -name 'myfile.*' 2> /dev/null
또는 아마도
find -name 'myfile.*' 2> /tmp/errorlog
또한 find
출력을 전달하는 등의 명령 문자열이있는 경우 명령의 xargs
모든 구성 요소에서 출력을 캡처하려면 전체 명령 파이프 라인을 괄호 안에 넣어야합니다. 예 :
(find | egrep ^[RS].[0-9]+/.svg] | xargs head -1 ) 2> /dev/null
괄호를 생략하고 대신 수행 한 경우-
find | egrep ^[RS].[0-9]+/.svg] | xargs head -1 2> /dev/null
find 또는 egrep에서 권한 거부 오류가 계속 표시되지만 xargs에 대해 stderr이 경로 재 지정됩니다.
보시다시피 테스트 실행 중에 내용을 본 후에 만 stderr를 버릴 것입니다.
GNU find
와 POSIX 호환 가능한 한 find
, -print
옵션은 암시 적입니다. 원하는 경우 명시 적으로 제공 할 수 있습니다.
2>&1 |
에서 대신 사용될 수 있습니다 |&
(즉, stderr을 stdout으로 명시 적으로 리디렉션 한 다음 파이프 라인의 다음 명령으로 파이프 할 수 있음).
2> >( grep filter )
편리합니다
오류 메시지는 stdout이 아닌 stderr 에 기록 되지만 파이프는 stdout 에만 있습니다.|
당신은 아마 원하는 |&
, 파이프가있는 stderr에 뿐만 아니라 표준 출력 .
오류 메시지를 무시하려면 stderr을 / dev / null로 리디렉션하십시오.
find . -name 'myfile.*' -print 2>/dev/null
또한 http://mywiki.wooledge.org/UsingFind를 읽어보십시오 .