2011-08-19 9 views

답변

6

당신은 부탁드립니다. 실제로, 그것은 작동한다; 그것은 당신이 말한 것과 정확히 똑같습니다. 분명히 그것은 당신이 예상 한 것이 아닙니다. 나는 당신이 그것이 123을 인쇄 할 것을 기대한다고 생각하지만 실제로 말하지 않았습니다.

(참고 : "표준 입력은"표준 입력이며, "표준 출력은"표준 출력됩니다.)

/bin/echo 123 | /bin/echo

여기 무슨 일입니다. echo 명령은 인수 123과 함께 실행됩니다. stdout에 "123"다음에 개행 문자를 씁니다.

stdout은 파이프 (|)를 통해 두 번째 echo 명령의 stdin으로 리디렉션됩니다. echo 명령은 stdin을 무시하기 때문에 첫 번째 에코의 출력은 무시됩니다. 두 번째 echo 명령에 인수를 지정하지 않았으므로 아무 것도 인쇄하지 않습니다.

일반적으로 파이프 (|는) 필터, 표준 입력에서 읽고 표준 출력에 기록 프로그램과 함께 사용된다 (당신이 봤어 사실,/빈은/인수없이 에코 일반적으로 단일 빈 줄을 인쇄?). cat은 아마도 가장 간단한 필터 일 것입니다. 단지 입력을 읽고 변경되지 않은 채 출력에 씁니다 (즉, some-command | catsome-command로 작성 될 수 있음).

단순한 필터의 예는 rev이며, 각 줄의 문자를 반대로 표준 입력으로 복사합니다.

echo 123 | rev 

인쇄

321 

rev는 필터이고; echo은 그렇지 않습니다.echo은 stdout으로 출력하기 때문에 파이프의 왼쪽에 붙이는 것이 좋지만 stdin에서는 읽지 않으므로 파이프의 오른쪽에서 사용하는 것이 적절하지 않습니다.

+0

감사합니다. 대답은 "echo ignores stdin"입니다! – abc

0
/bin/echo 123 < /bin/echo 

파이프 = concate

http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-4.html

파이프는의 입력과 같은 프로그램의 출력을 사용하게 한

+0

"the pipe = concate"? 오타가 없어도 이것은 혼란스러운 종류의 설명처럼 보입니다 – sehe

+0

고마워요. 하지만 내가 가지고있는 것으로는 첫 번째 메아리가 파이프로 파이프를 리디렉션하고 두 번째 파이프에서 파이프를 가져올 것이라고 생각했습니다. 그게 옳지 않은가? – abc

+0

예 파이프 = 연결 부분을 얻지 못했습니다. 그게 무슨 뜻 이죠? – abc

5

"에코"로부터 판독 다른 표준 입력이 아닌 명령 행. 따라서 파이프 라인이 여기서 작동하지 않습니다. bash는 설명서에서

:

echo [-neE] [arg ...] 

Output the args, separated by spaces, terminated with a newline. 

그래서 첫 번째 에코 인쇄는 그것의 "123"출력을 서서, 그러나, 두 번째 에코하지 않았다 사용이 때문에 "123"삭제했다. 그런 다음 "echo"를 실행하는 것처럼 빈 줄이 인쇄됩니다. 키이스 톰슨 제안

당신은 고양이를 사용할 수 있습니다 작동하지 않는 이유

echo 123|cat 
+1

오른쪽. 보십시오'/ bin/echo 123 |/bin/cat'. (물론 간단한 'echo 123'도 마찬가지입니다.) –

+0

. 고양이는 그가 필요한 것입니다. –

+0

고마워,하지만 내 질문은 어떻게 화면에 문자를 인쇄하지 않습니다. 내가 시도한 에코 구조가 작동하지 않는 이유입니다. 큰 차이가 있습니다. – abc

관련 문제