Readline의 구성 파일 파서에는 오류 검사 기능이 일부 부족합니다.

Readline의 구성 파일 파서에는 오류 검사 기능이 일부 부족합니다.

내 Ubuntu 16.04 시스템의 Bash/Readline 버전이 대괄호 붙여넣기 모드를 지원하는지(지원하지 않음) 여부를 조사하지 않았으므로 호기심에 이 문서에 제공된 다음 명령을 실행했습니다.우분투 답변 물어보기.

bind 'set-enable-bracketed-paste off'

설정이 존재하지 않으면 구문 오류에 대해 불평하거나 아무것도 하지 않고 set-enable-bracketed-paste싶습니다 . bind대신 소문자 바인딩을 해제합니다 p. 즉, 입력할 때 문자가 블랙홀로 사라집니다.

bind이 명령을 사용하면 첫 번째 공백 문자(문자열에 공백이 있는 경우) 바로 앞의 마지막 하이픈 뒤의 문자가 분리되는 것으로 보입니다 . 예를 들어 다음 명령을 실행했습니다.

이렇게 하면 r캐릭터 바인딩이 해제됩니다.

bind '__-r anymorecharacters'

이렇게 하면 캐릭터 바인딩이 해제됩니다 2.

bind 'xxxx-1-2xxx'

문자 앞에 Ctrl-를 입력하여 문자를 입력할 수 있으므로 다시 바인딩할 수 있습니다.V

bind 'r: self-insert'
bind '2: self-insert'

나에게 이것은 예상치 못한 놀라운 행동이며 버그라고 생각합니다. 하지만 저는 Readline에 대해 잘 알지 못하기 때문에 이 동작에 대한 합리적인 설명이 있는지 여기에 물어보고 싶다고 생각했습니다.

답변1

Readline의 구성 파일 파서에는 오류 검사 기능이 일부 부족합니다.

set-enable-bracketed-pastecontrol-DEL방식으로 구문 분석하거나 meta-q구문 분석할 것입니다. Readline은 빼기 기호로 구분된 마지막 부분을 취하여 이를 키 이름으로 이해하려고 시도하고, 나머지 부분을 취하여 수정자 시퀀스로 이해하려고 시도합니다.

키를 식별하는 코드키 이름 테이블에 일치하는 이름이 없으면 기꺼이 첫 번째 문자만 살펴보는 것으로 돌아갑니다. 따라서 키를 paste나타내는 데 사용됩니다 .p

수정자에 대한 코드 찾기문자열에 다른 비수정자가 있는지 여부는 상관하지 않으며 수정자가 빼기 기호로 끝나는 것을 기대하지 않습니다. 따라서 set-enable-bracketed-단순히 수식어가 없는 것으로 처리됩니다.

p이는 키를 "바인딩 해제"하지 않습니다 . 그것에 대한-키를 p"" 라는 함수에 바인딩합니다 off. 이를 수행하는 코드off함수 테이블에 ""라는 함수가 없으면 오류가 발생하지 않습니다.기본 메뉴그런 기능은 없습니다.

관련 정보