bash에서 stdout과 stderr 둘 다 배관?
최신 버전의 bash는&>
연산자, (내가 올바르게 이해한 경우) stdout과 stderr를 모두 파일로 리디렉션합니다.&>>
대신 파일에 추가됩니다.
다른 명령어로 연결하는 대신 동일한 작업을 수행하는 가장 간단한 방법은 무엇입니까?
예를 들어, 다음 행에서:
cmd-doesnt-respect-difference-between-stdout-and-stderr | grep -i SomeError
나는 grep가 instdout과 stderr 둘 다 콘텐츠에서 일치하기를 원합니다(효과적으로, 그것들을 하나의 스트림으로 결합합니다).
참고: 이 질문은 리디렉션이 아니라 배관에 대한 질문이므로 현재 중복으로 표시된 질문과 중복되지 않습니다.
(참고:&>>file
파일에 추가되는 동안&>
이전에 존재했던 파일을 리디렉션하고 덮어씁니다.
결합하기stdout
그리고.stderr
당신은 후자를 사용하여 전자로 리디렉션할 것입니다.1>&2
이것은 stdout(파일 설명자 1)을 stderr(파일 설명자 2)로 리디렉션합니다. 예를 들어, 다음과 같습니다.
$ { echo "stdout"; echo "stderr" 1>&2; } | grep -v std
stderr
$
stdout
스타드아웃으로 갑니다.stderr
stderr로 갑니다. grep
보기만 하는stdout
,이런 이유로stderr
터미널에 인쇄합니다.
반면에:
$ { echo "stdout"; echo "stderr" 1>&2; } 2>&1 | grep -v std
$
stdout과 stderr 모두에게 편지를 쓴 후,2>&1
stderr을 stdout으로 다시 리디렉션하고grep
stdin에서 두 문자열이 모두 표시되므로 두 문자열을 모두 필터링합니다.
리디렉션에 대한 자세한 내용은 여기를 참조하십시오.
예제(POSIX)에 대하여:
cmd-doesnt-respect-difference-between-stdout-and-stderr 2>&1 | grep -i SomeError
또는, 사용>=bash-4
:
cmd-doesnt-respect-difference-between-stdout-and-stderr |& grep -i SomeError
Bash는 의 줄임말이 있습니다.2>&1 |
다시 말하면|&
다음 중 stdout 및 stderr 파이프를 모두 사용합니다(매뉴얼 참조).
cmd-doesnt-respect-difference-between-stdout-and-stderr |& grep -i SomeError
이 기능은 Bash 4.0에 도입되었습니다. 릴리스 정보를 참조하십시오.
언급URL : https://stackoverflow.com/questions/16497317/piping-both-stdout-and-stderr-in-bash
'programing' 카테고리의 다른 글
특정 커밋에서 분기점을 만들려면 어떻게 해야 합니까? (0) | 2023.05.03 |
---|---|
테이블 레벨 백업 (0) | 2023.05.03 |
MongoDB, 인덱스된 필드에 대한 정규식에 의한 쿼리 성능 (0) | 2023.05.03 |
MSBuild TypeScript 컴파일 사용 안 함 (0) | 2023.05.03 |
OpenFileDialog를 사용하여 폴더를 선택하는 방법은 무엇입니까? (0) | 2023.05.03 |