이 grep 명령이 작동하지 않는 이유는 무엇입니까?


24

이런 방식으로 grep을 사용하려고 할 때 :

service --status-all | grep network

grep"네트워크"문자열로만 제한하기 위해 파이프를 연결했지만 여전히 모든 서비스를 나열합니다.


사실 후 :

명령이 이런 식으로 동작하는 이유를 설명하는 이 기사 를 주목했습니다 .Linux 에 대해 좋아하는 이유는 항상 좋은 이유가 있지만 직관적이지 않아도됩니다.

답변:


41

시험:

service --status-all |& grep network

명령 행 응용 프로그램은 표준 출력 (stdout) 및 표준 오류 (stderr) 로 알려진 두 개의 텍스트 스트림으로 인쇄 할 수 있습니다 . 기본적으로 터미널은 두 출력 모두 동일하게 표시합니다.

표준 출력은 숫자 1을 부여하고, 표준 오류는 기본, 리디렉션 연산자, 등으로 숫자 2를 부여 >, |그리고 <유일한 표준 출력, 숫자 1에 적용됩니다.

|&stdout과 stderr을 오른쪽 표준 입력 (stdin) 스트림의 프로세스에 함께 파이프하여 grep예상대로 작동합니다.

service --status-allstderr에 인쇄 하는지 모르겠지만 일반적으로 별도의 stderr 스트림을 갖는 것이 stdout이 침묵 할 때에도 오류를 볼 수 있기 때문에 매우 유용합니다.


답변 주셔서 감사합니다, 이것은 많은 관심을 생성 한 것 같습니다. 그래서 나는이 문제를 가진 유일한 사람이 아니라고 생각합니다.
Meer Borg

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.