![터미널에서 삭제는 작동하지만 화살표 키는 작동하지 않는 이유는 무엇입니까? [복사]](https://linux55.com/image/155280/%ED%84%B0%EB%AF%B8%EB%84%90%EC%97%90%EC%84%9C%20%EC%82%AD%EC%A0%9C%EB%8A%94%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%EB%A7%8C%20%ED%99%94%EC%82%B4%ED%91%9C%20%ED%82%A4%EB%8A%94%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
Linux 터미널에서는 "cat > file.txt"를 사용하여 한 번에 한 줄씩 파일을 생성합니다.
줄당 삭제 키는 작동하지만 화살표 키는 줄에서 왼쪽과 오른쪽으로 이동하는 대신 이스케이프 코드를 삽입하는 것으로 나타났습니다.
왜 이런거야? 기본적인 단말기 조작에 왼쪽, 오른쪽 화살표 키를 사용할 수 없는 이유가 있나요? 나는 이것을 할 수 있는 GNU readline과 같은 것이 있다는 것을 알고 있지만 내 질문은 그것과 아무 관련이 없습니다.
답변1
터미널 드라이버의 라인 편집 기능은 매우 원시적이고아니요여기에는 삽입점을 왼쪽과 오른쪽으로 이동하는 것과 같은 작업이 포함됩니다.
그들의 업무에는 다음이 포함됩니다:
- 마지막 문자 제거(
VERASE
/erase
, BackSpace) - 마지막 단어 제거(
VWERASE
/werase
, Control-W) - 전체 줄 삭제(
VKILL
/kill
, Control-U)
또한 여러 키 시퀀스(일반적으로 왼쪽 및 오른쪽 화살표 키로 전송되는 이스케이프 문자)를 특수 작업에 바인딩할 수 없습니다.
물론 유니코드 VERASE
는 VWERASE
지원하지 않습니다. Linux에는 형식적인 IUTF8
플래그(간단한 데이터에 대해 작동하므로 아무것도 없는 것보다 낫습니다)가 있지만 너비가 0인 수정자, 방향 플래그 등에 대해서는 알지 못합니다.
자세한 내용은 stty(1)
및 맨페이지를 참조하세요 .termios(3)