Bash는 Enter 키를 누르지 않고 터미널에 작성된 내용을 어떻게 검색합니까?

Bash는 Enter 키를 누르지 않고 터미널에 작성된 내용을 어떻게 검색합니까?

명령이 실행 중이고 실행 중인 ping동안 터미널에 무언가를 입력한다고 가정해 보겠습니다 .ping

이제 ping종료하고 bash제어권을 다시 얻으면 실행 bash중에 입력한 내용이 터미널에 인쇄됩니다 . ping이것은 내가 의미하는 바를 보여주는 스크린샷입니다.

여기에 이미지 설명을 입력하세요

이 정보를 어떻게 bash얻었습니까? stdin를 입력할 때 "I typed this while ping was running"누르지 않았기 때문에 에서 가져오지 않았다고 확신합니다 Enter(그래서 stdin비어 있습니다).

답변1

세게 때리다했다터미널인 표준 입력(stdin)에서 입력을 가져옵니다.

터미널은 둘 중 하나에 있을 수 있습니다.모드:날것의또는요리(“문자 모드” 및 “라인 모드”라고도 함, “raw” 및 “cooked”라는 용어는 Unix 세계에서 주로 사용됩니다.) (“cooked”라는 단어는 “raw”와 반대되는 말장난으로 도입되었습니다. ). 원시 모드에서는 터미널이 입력을 즉시 애플리케이션에 전송합니다. Cooked 모드에서 터미널은 전체 라인을 읽고 (매우 원시적인) 라인 편집 메커니즘을 제공하며 사용자가 를 누를 때만 애플리케이션에 데이터를 전송합니다 Enter.

터미널은 요리 모드에서 시작됩니다. Bash와 같이 입력에 대한 더 많은 제어를 원하는 애플리케이션은 사용자가 명령을 입력하기를 기다리는 동안 터미널을 원시 모드로 설정합니다.

답변2

나는 터미널이 키보드를 통해 수신된 텍스트의 모든 줄을 버퍼링하므로 터미널 장치 파일에 첨부된 파일 설명자(예: fd0)가 있는 모든 프로그램이 터미널이 "전송"할 때까지 해당 줄의 텍스트를 볼 수 없다고 믿습니다. - 를 누르면 이런 일이 발생합니다 Enter.
(쉘의 라인 편집자가 이 문제를 어떻게 해결하는지 - 잘 모르겠지만, 를 누르기 전에 확실히 텍스트를 확인합니다 Enter)

또한 쉘이 하위 프로세스(이 경우 ping)를 시작하면 하위 프로세스가 실행될 때 일시 중지/중 상태가 됩니다 wait. 따라서 터미널이 텍스트를 보류하지 않더라도 쉘은 이를 무시합니다. 자식 프로세스를 위한 것입니다.

따라서 화면에 나타나는 텍스트는 다음과 같습니다.단말기그것을 표시하고 있지만 자식이 종료되고 쉘이 "깨어나기" 전까지는 그것을 캡처하고 아무것도 하지 않는 프로그램이 없습니다. 그런 다음 텍스트는 쉘 라인 편집기로 전송됩니다. 모든 터미널이 반드시 필요한 것은 아니라고 생각하지만 그렇게.

관련 정보