programing

bash에서 stdout과 stderr 둘 다 배관?

topblog 2023. 5. 3. 20:45
반응형

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스타드아웃으로 갑니다.stderrstderr로 갑니다. grep보기만 하는stdout,이런 이유로stderr터미널에 인쇄합니다.

반면에:

$ { echo "stdout"; echo "stderr" 1>&2; } 2>&1 | grep -v std
$

stdout과 stderr 모두에게 편지를 쓴 후,2>&1stderr을 stdout으로 다시 리디렉션하고grepstdin에서 두 문자열이 모두 표시되므로 두 문자열을 모두 필터링합니다.

리디렉션에 대한 자세한 내용은 여기를 참조하십시오.

예제(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

반응형