파이프라인에서 출력이 어떻게 입력으로 전달되나요?

파이프라인에서 출력이 어떻게 입력으로 전달되나요?

|저는 파이프가 어떻게 작동하는지, 특히 왼쪽 명령의 출력이 오른쪽 명령의 입력으로 전달되는 방식을 이해하려고 합니다 . 왼쪽 명령의 출력이 오른쪽 명령에 인수로 전달된 파일로 처리되는지 여부, 즉

a | b

그리고

a > a_output
b a_output

이는 b파일 이름을 입력으로 가져와 읽는 것을 의미합니다. 하지만 이렇게 하면 상황이 다음과 같이 될 것 같습니다.

cat wonderfulfile | tr 'a-z' 'A-Z'

tr파일 이름을 입력으로 사용하지 않으므로 불가능합니다 . 또는 왼쪽 명령의 출력을 오른쪽 명령의 표준 입력으로 처리합니다. 즉,

a

인쇄

f
g
h

화면 속으로, 응

a | b

그리고

b
f
g
h
^D

아마도

b f g h

또는

b 'f g h'

이것은 다음과 같은 내용과 모순되는 것 같습니다.

who | less

왜냐하면 less(적어도 옵션 중 어느 것도)에는 파일 이름이 필요하지 않기 때문입니다. 당신의 도움을 주셔서 감사합니다.

답변1

이것은 두 번째 옵션입니다.

a | b

표준 출력으로 출력되는 모든 것은 a표준 입력으로 제공됩니다.b

당신이 인식하는 모순은 하나가 아닙니다. less파일 이름을 요구하지 않고 표준 입력에서 읽을 수 있는 옵션이 없습니다(터미널이 아닌 경우 실패합니다).

답변2

왼쪽 명령의 출력이 오른쪽 명령에 인수로 전달된 파일로 처리되는지 여부

아니요.

파이프는 표준 출력을 표준 입력에 연결합니다. 그것이 바로 그것이 하는 일입니다. >표준 출력을 파일로 리디렉션한 것처럼 |표준 출력 스트림을 두 번째 명령의 표준 입력 스트림으로 리디렉션합니다.

즉, b프로그램이 입력에서 ing과 같은 작업을 수행할 때마다 출력에 있는 내용을 읽습니다. 그 사이에는 파일이 없습니다. 파이프는 출력과 입력 사이의 완전한 "연결"입니다. "표준 출력"과 "표준 입력"은 UNIX 스타일 운영 체제(및 PC 스타일 하드웨어의 대부분의 다른 운영 체제)에서 모든 프로그램이 갖는 두 가지 스트림입니다.reada

관련 정보