|
저는 파이프가 어떻게 작동하는지, 특히 왼쪽 명령의 출력이 오른쪽 명령의 입력으로 전달되는 방식을 이해하려고 합니다 . 왼쪽 명령의 출력이 오른쪽 명령에 인수로 전달된 파일로 처리되는지 여부, 즉
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 스타일 하드웨어의 대부분의 다른 운영 체제)에서 모든 프로그램이 갖는 두 가지 스트림입니다.read
a