zsh는 터미널에 표준 모드를 ​​사용합니까?

zsh는 터미널에 표준 모드를 ​​사용합니까?

나는 항상 탐구 terminfo하고 있습니다 stty. 실행해 보면 stty -a|grep icanon캐노니컬 모드가 설정되어 있는 것 같은데, 끄고 stty -icanon다시 확인해 보면 여전히 설정되어 있는 것을 볼 수 있습니다. Bash에서 동일한 작업을 수행하면 icanon을 비활성화할 수 있지만 동작에 어떤 변화도 느껴지지 않습니다. 그렇다면 두 가지 질문이 있습니다. zsh에서 iconon을 비활성화할 수 없는 이유는 무엇이며, 가능하다면 동작에 어떤 영향을 미치나요?

답변1

Bash에서 동일한 작업을 수행하면 icanon을 비활성화할 수 있지만 동작에 어떤 변화도 느껴지지 않습니다.

bash가 정식 모드로 전환되었기 때문입니다.떠나다사용자 명령을 읽을 때(단말기 드라이버에서 제공하지 않는 줄 편집 기능을 구현하기 위해 - 텍스트 삽입, 화살표 키를 사용하여 커서를 좌우로 이동하는 등)다시 덮다명령줄을 실행할 때의 이전 터미널 설정.

효과를 보려면 다음과 같은 외부 명령을 실행하십시오 cat.

bash$ stty -icanon
bash$ cat
hheelloo

stty echo각 키는 열렸기 때문에 한 번, cat전체 행을 기다리지 않고 즉시 읽고 다시 쓰기 때문에 한 번 반복됩니다 .

[zsh 사용] 끄고 stty -icanon다시 확인해 보니 여전히 설정되어 있는 것을 볼 수 있습니다.

위에서 설명한 이전 터미널 설정을 복원하는 경우 zsh에도 적용됩니다.합리적인 기본값(포함 echoicanon설정). 아마도 명령이 정식 모드를 벗어나면 다음과 같이 가정하기 때문일 것입니다.떠나다종료 후 이는 단순한 사고입니다(예: 전체 화면 응용 프로그램이 충돌 vi하거나 less충돌하는 경우).

zshreadline 라이브러리를 사용하여 다른 프로그램처럼 작동하게 만드는 옵션을 찾을 수 없었지만 bash명령을 실행하기 전에 icanon 모드를 끄려면 동일한 명령줄에서 실행하여 이를 수행할 수 있습니다.

zsh$ stty -icanon; cat
hheelloo

관련 정보