Bash가 stty 설정을 존중하지 않는 이유는 무엇입니까?

Bash가 stty 설정을 존중하지 않는 이유는 무엇입니까?

~에서답변이전 질문 중 하나에서 쉘(예: bash)에는 not match 기능이 있다는 것을 배웠습니다 stty(1). 특히 표준 모드 stty icanon(라인 규칙으로 규칙 편집 등)를 활성화하는 설정을 사용하여 원시 모드에서 실행할 수 있습니다. ).

이와 관련하여

  1. 실행 중인 각 프로세스(프로세스 그룹)가 해당 터미널에 대해 자체 설정을 구성할 수 있다고 말하는 것이 맞습니까? 즉, 인스턴스를 설정하는 시스템 전체 지점이 없으며 tty각 프로세스(프로세스 그룹)마다 개별적입니다. (따라서 bash는 명령 이름 읽기를 시작하기 전에 명시적으로 원시 모드를 설정합니다.)
  2. 정확히 어떤 stty(1)영향이 있나요? 내 생각엔 이것이 일련의 사용자 기본 설정을 구현한 것 같습니다.터미널 에뮬레이터사용된 터미널에 대해서는 pty 마스터 터미널입니다.
  3. 양측이 통신할 때 슬레이브에서 bash를 실행하고 마스터에서 터미널 에뮬레이터를 실행하면 서로 다른 tty 구성이 설정됩니다(bash: "즉시 문자 보내기, 줄 편집 없음", 에뮬레이터: "EOL에서 문자 보내기, 줄 편집기를 사용하세요.") ), 왜 bash의 규칙이 승리합니까? 어떤 상황이 이 우선순위에 영향을 미치나요?
  4. catbash를 통해 일부 명령을 실행 하면 stty(1)설정이 적용됩니다. 그렇다면 이는 프로그램을 실행하기 전에 bash가 이를 명시적으로 기본값으로 설정한다는 의미입니까, 아니면 cat다른 방식으로 "상속"됩니까?

답변1

모든 프로세스를 사용하여 tcsetattr터미널 드라이버 특성을 변경할 수 있습니다(참고 man -s 3 termios자료의 전체 608 라인 스토리 참조). 터미널 자체는 마지막으로 본 상태만 유지하며 다른 기록은 유지하지 않습니다.

정중한 사용법은 모든 변경 사항을 중첩하는 것입니다. 이를 변경하는 모든 프로세스는 먼저 현재 세트를 읽고 저장해야 하며, 변경하려는 항목만 변경하고 종료하기 전에 시작된 원래 세트(종료된 세트 포함)를 복원해야 합니다. ) 할 수 있다).

한 번에 한 줄(정규 입력)에서 단일 문자로 전환하는 것은 termios 구조의 c_lflag 멤버에서 1비트 변경이며 필요한 비트 마스크에는 ICANON 정의가 있습니다. 마찬가지로 ECHO 여부도 뒤집습니다.

관련 정보