쉘은 오류 처리 입력 키를 읽습니다.

쉘은 오류 처리 입력 키를 읽습니다.

저는 비교적 새로운 Linux Mint를 설치하고 있는데 지금까지 큰 문제를 발견하지 못했고 사용자 입력을 대화식으로 읽는 명령줄 도구를 사용할 수 없다는 것을 깨달았습니다. 예상대로 한 줄의 입력을 사용하여 입력 키를 처리하는 대신 ^M터미널에 일련의 문자를 인쇄하고 계속해서 입력하라는 메시지를 표시합니다.
예를 들어 git add -p:

Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]? y^M

좀 더 테스트한 후에 모든 쉘 read작업이 이 작업(in zsh및 out bash)을 수행하고 있으며 sh완전히 사용할 수 없다는 것을 깨달았습니다.

zsh 및 배시:

$ read test
value^M^C
$

쉿:

$ echo "test"^M^C
$ exit^M^M^M^C
$

새 터미널을 열었는데 영향을 받지 않는 것 같아서 여기에 머물지는 않지만 이 터미널이 작동하는 방식을 만들기 위해 무슨 일이 일어나고 있는지 알고 싶습니다. 사람들의 이론을 테스트하기 위해 깨진 부분을 잠시 열어 두겠습니다.

답변1

이는 일반적으로 터미널을 원시 입력 모드로 설정한 프로그램이 예기치 않게 종료되어 터미널 설정을 이전 값으로 복원할 수 없을 때 발생합니다.

간단한 조작으로 stty sane모든 것이 정상으로 재설정됩니다.

터미널을 "raw"로 만드는 과정에서 닫음 ^M으로써\r^J\nICRNLc_iflag 테미오스설정. 이 작업은 명령줄을 통해서도 수행할 수 있습니다 stty -icrnl.

Bash와 같은 쉘의 명령줄은 일반적으로 이것의 영향을 받지 않습니다. 왜냐하면 bash는 자체적으로 원시 터미널을 만들고 자체 키 번역을 수행하기 때문입니다(삽입 지점을 왼쪽 및 오른쪽으로 이동, 명령줄 기록 등과 같은 좋은 줄 편집 기능을 제공하기 위해). 다른 명령을 실행할 때만 기본 터미널 설정을 복원합니다.

관련 정보