나는 항상 탐구 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
에도 적용됩니다.합리적인 기본값(포함 echo
및 icanon
설정). 아마도 명령이 정식 모드를 벗어나면 다음과 같이 가정하기 때문일 것입니다.떠나다종료 후 이는 단순한 사고입니다(예: 전체 화면 응용 프로그램이 충돌 vi
하거나 less
충돌하는 경우).
zsh
readline 라이브러리를 사용하여 다른 프로그램처럼 작동하게 만드는 옵션을 찾을 수 없었지만 bash
명령을 실행하기 전에 icanon 모드를 끄려면 동일한 명령줄에서 실행하여 이를 수행할 수 있습니다.
zsh$ stty -icanon; cat
hheelloo