나는 기대
echo |
다음을 수행하십시오.
- 빈 문자열을 에 인쇄합니다
stdout
. stdout
에 파이프를 연결합니다stdin
.
빈 문자열이 작성될 때 내가 기대하는 것은 stdin
아무것도 없다는 것입니다. 대신에 일어나는 일: >
bash의 bash처럼 동작하는 프롬프트가 나타납니다 .
> echo m
m
왜 그런 겁니까?
답변1
|
두 개의 명령을 상호 연결하는 연산자입니다.
cmd1 | cmd2
cmd1
파이프의 쓰기 끝에 연결된 cmd2
stdout 과 동일한 파이프의 읽기 끝에 연결된 stdin과 병렬로 시작됩니다 .cmd1
cmd2
존재하다:
cmd1 |
오른손 명령이 누락되었습니다.
쉘은 나머지 명령을 요청하는 보조 프롬프트( PS2
기본값 )를 실행하여 >
이를 알려줍니다 .
stdout을 echo
파이프의 쓰기 끝으로 만들고 해당 stdin을 동일한 파이프의 읽기 끝으로 지정하려면(단, stdin에서 읽지 않음 ) 유사한 쉘 연산자(파이프 리디렉션 연산자 )를 echo
사용해야 합니다 .yash
>>|
echo test 1>>|0
이는 yash
파이프를 생성하고 쓰기 끝을 fd 1(stdout)에 할당하고 읽기 끝을 fd 0(stdin)에 할당하라는 의미입니다.
다시 말하지만 이것은 별로 의미가 없습니다.
답변2
무엇을 파이프로 연결하고 싶나요? 그 |
뒤에는 다른 명령이 와야 하며, bash는 >
파이프라인을 완료하라는 메시지를 표시합니다.
다음을 모두 수행합니다.
- 빈 문자열을 표준 출력으로 인쇄합니다.
표준 출력을 표준 입력으로 파이프합니다.
에코 -n '' |
이는 cat
두 번째 명령에 대한 자리 표시자일 뿐이며, 이 경우 단순히 표준 입력을 표준 출력으로 보냅니다.