터미널 화면에서 대괄호 붙여 넣기 모드가 산발적으로 활성화되는 이유는 무엇입니까?


23

우분투 14.04를 사용하고 있으며 터미널 화면에 이상한 문제가있어서 많은 버그가 있습니다. 누군가가 나를 도와 줄 수 있습니까? 아니면 내가 잘못하거나 Linux가 아닌 방법으로 일하고 있다면 설명해 주시겠습니까? 나는 일종의 해결책을 가지고 있지만 왜 이것이 계속 반복되는지 이해하고 싶습니다.

나는 종종 노트 나 인터넷에서 bash 명령을 복사하고 때로는 복사 한 것을 감싸는 이상한 0 ~ 1 기호가 나타납니다. 그것은 매우 성가 시며 이것은 완전히 임의의 방식으로 발생합니다.

긴 검색을 한 후에이 문제가 Bracked Paste Mode 라는 것을 알았printf "\e[?2004l" 습니다.이 모드가 갑자기 활성화되면이 명령 을 사용하여 터미널을 수정합니다.

어떻게 든이 기능을 영구적으로 비활성화 할 수 있습니까? 나는 지금 일하고있는 모든 우분투 머신에서이 문제에 직면했다. 이전에는 Ubuntu 10.10 및 12.04를 사용했으며 이전에는 그런 문제가 없었습니다.

답변:


11

괄호 붙여 넣기 모드를 비활성화 할 수 있습니다.

bash에서 일시적으로 시도하려면 다음을 수행하십시오.

bind 'set enable-bracketed-paste off'

그런 다음 동작 방식이 마음에 들면 설정을 ~/.inputrc시스템 전체 또는 시스템 전체 /etc/inputrc(또는 우분투의 어느 곳에서나)에 둘 수 있습니다.


4
이 나를 위해 할 것 같다 모든 내가 (이 만 소문자 "p가"), 또는 전혀처럼 붙여 문자 "P", 그리고 아무것도를 입력 할 수 있도록 할 것입니다
브라이언 분석 재개 모니카 말한다

@BrianLeishman 특이한 방법으로 bind인식하지 않는 인수를 구문 분석하므로 버전 7 이전의 Readline 또는 4.4 이전의 Bash를 사용하여이 명령을 실행하면 발생합니다. 이 답변은 다음 Ubuntu 릴리스 (17.04)까지는 아무 것도 유용하지 않습니다.
Anthony G-Monica에 대한 정의

printf내에서 둘 때 접근 작동하지만,하지 작업을 수행 .bashrc하고, 기능이 어떻게 든에 주기적으로 자신을집니다. 이 bind접근법은 키보드를 깨뜨립니다 ( p키가 , and putting that line in my ~ / .inputrc` 작동 하지 않고 10 초 동안 작동 한 다음 콘솔은 -enaset-enaset-...10 초 사용 후 영원히 바프 아웃을 시작 합니다. 마지막으로 소스에서 bash 4.4로 수동으로 업그레이드하여 바보를 고쳤습니다 문제.
클라우드

1
올바른 명령은 bind 'set enable-bracketed-paste off'첫 번째`-`` 대신 공백이 있습니다. 한 문자 만 편집 할 수없는 것 같습니다.
Arrow

7

에 해당 명령을 넣을 수 있습니다 bashrc. 그러면 터미널을 열 때마다 적용됩니다.

끝에 입력 vi ~/.bashrc하고 추가 printf "\e[?2004l"하고 파일을 저장하십시오.:wq


예, 실제로 이것을 실제로했습니다 :) 나중에 @jwd가 제안한 대로이 모드를 비활성화했습니다.
artemdevel

1
echo 'printf "\e[?2004l"' >> ~/.bashrc한 줄에 동일한 작업을 수행하고로 확인할 수 있습니다 tail -n1 ~/.bashrc. 사용할 필요가 없습니다 vi.
pzkpfw

6

이런 일이 발생 하는지에 대한 원래의 질문에 대답하기 위해 가능한 시나리오는 다음과 같습니다.

  • 내 가정용 컴퓨터에는 괄호 붙여 넣기를 지원하는 새로운 버전의 zsh가 있습니다 (쉘 A라고 함).
  • 괄호 붙여 넣기 (쉘 B)를 지원하지 않는 쉘을 이전 버전의 bash로 설정 한 상태에서 컴퓨터에 shed습니다.

문제는 터미널 프로그램에서 셸 A에서 셸 B로 sshing 할 때 대괄호 붙여 넣기가 여전히 활성화되어 있다고 생각하므로 붙여 넣은 내용 (0 ~ 1 비트) 주위에 문자를 계속 추가합니다. 쉘 B는 그것들을 지원하지 않으므로 변경하지 않고 통과시킵니다. 쉘에 특수 이스케이프 시퀀스를 인쇄하여 괄호 붙여 넣기를 해제하도록 터미널에 지시해야합니다.printf "\e[?2004l" .

이 문제를 해결하는 몇 가지 방법이 있습니다.

  1. 괄호 붙여 넣기를 전혀 신경 쓰지 않는다면 쉘 A에서 끄십시오. 처음에는 활성화되지 않습니다 (@jwd의 답변)

  2. 쉘 A에서는 브라켓 붙여 넣기를 계속 사용하고 쉘 B에서는 비활성화하려면 이스케이프 시퀀스를 .bashrc(@MOHRE의 답변)에 추가하십시오

  3. 괄호 붙여 넣기를 지원하도록 쉘 B를 업그레이드하여 해당 0 ~ 및 1 ~ 문자를 올바르게 해석하십시오.

참고 : GNU 화면을 사용하는 경우 화면 printf외부에서 해당 명령 을 실행해야합니다 . 내부에는 작동하지 않는 것 같습니다.


감사합니다 @ rjh :)하지만 zsh를 사용하지 않았거나 설명 한대로 ssh에 문제가있었습니다. 몇 년 전에 우분투에서 잘못 구성된 것 같습니다.
artemdevel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.