기본 bash 동작 [닫기]

기본 bash 동작 [닫기]

나는 기대

echo |

다음을 수행하십시오.

  1. 빈 문자열을 에 인쇄합니다 stdout.
  2. stdout에 파이프를 연결합니다 stdin.

빈 문자열이 작성될 때 내가 기대하는 것은 stdin아무것도 없다는 것입니다. 대신에 일어나는 일: >bash의 bash처럼 동작하는 프롬프트가 나타납니다 .

> echo m
m

왜 그런 겁니까?

답변1

|두 개의 명령을 상호 연결하는 연산자입니다.

cmd1 | cmd2

cmd1파이프의 쓰기 끝에 연결된 cmd2stdout 과 동일한 파이프의 읽기 끝에 연결된 stdin과 병렬로 시작됩니다 .cmd1cmd2

존재하다:

cmd1 |

오른손 명령이 누락되었습니다.

쉘은 나머지 명령을 요청하는 보조 프롬프트( PS2기본값 )를 실행하여 >이를 알려줍니다 .

stdout을 echo파이프의 쓰기 끝으로 만들고 해당 stdin을 동일한 파이프의 읽기 끝으로 지정하려면(단, stdin에서 읽지 않음 ) 유사한 쉘 연산자(파이프 리디렉션 연산자 )를 echo사용해야 합니다 .yash>>|

echo test 1>>|0

이는 yash파이프를 생성하고 쓰기 끝을 fd 1(stdout)에 할당하고 읽기 끝을 fd 0(stdin)에 할당하라는 의미입니다.

다시 말하지만 이것은 별로 의미가 없습니다.

답변2

무엇을 파이프로 연결하고 싶나요? 그 |뒤에는 다른 명령이 와야 하며, bash는 >파이프라인을 완료하라는 메시지를 표시합니다.

다음을 모두 수행합니다.

  • 빈 문자열을 표준 출력으로 인쇄합니다.
  • 표준 출력을 표준 입력으로 파이프합니다.

    에코 -n '' |

이는 cat두 번째 명령에 대한 자리 표시자일 뿐이며, 이 경우 단순히 표준 입력을 표준 출력으로 보냅니다.

관련 정보