Bash에서 기본 복사 및 붙여 넣기 동작 비활성화


9

터미널 세션에 붙여 넣을 때 쉘은 Enter 키를 누르지 않고 즉시 명령을 실행합니다.

나는 그 행동을 비활성화하는 방법을 정말로 모른다.

MacOS Yosemite에 사전 설치된 터미널을 사용하고 있습니다.


9
물론 붙여 넣기 버퍼에 줄 바꿈이 포함 된 경우에만 해당됩니다. 이것은 bash와 거의 관련이 없습니다. (readline 라이브러리를 사용하는 경우에만 bash에 관한 것입니다.)
Peter-Reinstate Monica

...하지만 아직 bash(의 도움으로 readline) 수정되었습니다.
Alexis

답변:


16

bash4.4 지원이 라를 붙여 괄호 것이 새롭고 터미널에서 xterm, 당신은 할 수 있습니다 :

bind 'set enable-bracketed-paste'

(또는 추가 set enable-bracketed-paste귀하의에 ~/.inputrc)

즉, 원인이됩니다 복사 - 붙여 입력 한 경우 (즉, 버퍼와 같은 문자가 포함 된 경우 여전히 문제가있을 수로 해석 대신에 문자 메시지에 삽입되는 버퍼 ^C, ^Z및 터미널 에뮬레이터를 필터링하지 않음) .

zsh 버전 5.1 이후 기본적으로이 작업을 수행합니다.

다른 쉘이나 터미널에 대해서는 다음을 참조하십시오 : 이런 종류의 클립 보드 악용으로부터 어떻게 자신을 보호 할 수 있습니까?


바로 살펴 보겠습니다
Opaldes

부스 방법이 작동하지 않는 것
Opaldes

@Opaldes, 무엇을 시도 했습니까? 어떤 버전의 쉘과 어떤 터미널에서? OS / X도 함께 제공 xterm한다고 생각하면 대신 시도해 볼 수 있습니다. perl링크 된 질문에서 스크립트 를 사용해 보셨습니까 ?
Stéphane Chazelas

1
Mac OS X에서 터미널 창에 코드를 vim에 붙여 넣기 에 따라 @Opaldes OS / X 터미널은 OS / X Lion부터 브래킷 붙여 넣기를 지원합니다. 따라서 필요한 최신 버전의 zsh 또는 bash 만 있으면됩니다. 이전 zsh 버전에서는 구성을 통해이를 달성 할 수도 있습니다.
Stéphane Chazelas

1
이 유용한 기능을 Bash / Readline에 추가해 주신 Daniel Colascione에게 감사드립니다 : gnu-bash.2382.n7.nabble.com/…
Anthony Geoghegan

6

"줄 바꿈"문자를 붙여 넣을 때 발생합니다. 예를 들어 여러 줄을 붙여 넣거나 줄 끝에서 실수로 캐리지 리턴을 복사하는 경우. AFAIK 실제로이 동작을 비활성화 할 수는 없지만 완화 할 수있는 방법이 있습니다.

가장 쉬운 방법은 한 번에 한 줄씩 복사하고 마지막 문자를 놓치고 나중에 수동으로 추가하는 것입니다.

또는 the_velour_fog가 아래에 지적한 것처럼 인쇄되지 않은 문자를 표시하는 편집기에 붙여넣고 개행없이 다시 선택할 수도 있습니다.

GNU / Linux 배포판에는 한두 가지 해결 방법이 있지만 개념을 MacOS로 이식 할 수 있을지 전혀 모릅니다. 어쨌든 여기를 살펴보고 Mac에 비슷한 파일이 있는지 확인하십시오. 불행히도, 나는 그것을 의심한다.


난 그냥 쇼가 아닌 인쇄 된 문자가 다음 줄 바꿈없이 다시 선택한다는 편집기에 붙여
the_velour_fog

좋은 제안, 포함하도록 수정되었습니다.
I_GNU_it_all_along

그것이 항상 일어나는 것은 아니라는 것을 아는 것이 좋습니다. 나는 당신의 대답을 찬성했지만 그것은 나에게 해결책으로 더 많은 해결책입니다.
Opaldes

고통 스럽지만 일련의 명령을 복사 할 때 유용 할 수 있습니다.
I_GNU_it_all_along

내 "솔루션"은 일종의 해킹 해결 방법이지만 별도로 IMO를 선택하는 것보다 빠릅니다.
Peter Cordes

5

붙여 넣기 전에 작은 따옴표를 입력 한 다음 붙여 넣습니다. control-c 및 위쪽 화살표를 사용하여 하나의 거대한 선으로 편집하십시오.

텍스트에 작은 따옴표가 있지만 작은 따옴표가 포함되지 않은 경우 큰 따옴표도 작동합니다. $인용 부호가있는 거대한 행을 실제로 하나의 명령으로 실행하지 않기 때문에 큰 따옴표 안에 확장되거나 포함 된 다른 것이 있으면 괜찮습니다 .


줄 바꿈은 하나의 큰 긴 줄을 만드는 대신 공식 프롬프트가 아닌 연속 프롬프트를 시작하기 때문에 실제로 전체를 편집 할 수는 없습니다.

이 4 줄을 감안할 때 :

echo
ls
foo
bar

내가 제안한대로 붙여 넣으면 화면에 다음과 같이 나타납니다.

$ 'echo 
> ls
> foo
> bar        <or cursor here if you didn't include a trailing newline
> [cursor here]

그런 다음 control-C와 위쪽 화살표를 누를 수 있습니다. (control-C는 커서와 같은 줄의 모든 것을 파괴하므로 유용한 텍스트가 있으면 먼저 return을 누르십시오.)

대안은 따옴표를 닫고 return 키를 누른 다음 위쪽 화살표를 누르는 것입니다.

어쨌든, 위쪽 화살표 후

$ 'echo
ls
foo
bar

control-a 및 선행을 제거하십시오 '. 붙여 넣기 블록을 통해 단어 단위로 빠르게 이동하려면 왼쪽 제어 및 오른쪽 제어를 사용하십시오. 또는 터미널 설정이 제어 화살표 키를 지원하지 않으면 alt-b 및 alt-f.


리터럴 개행은 실제로 명령을 분리하며이 4 행은 명령 내역에 개별적으로 들어갑니다 . ;또는 로 변경하고 싶을 수도 있습니다 &&. (나는 그것에 대한 트릭을 모른다. 빨리 또는 뒤로 단어에 키 반복을 사용하여 빨리 도착하고 수동으로 수행하십시오.)


2

페이스트는 줄 바꿈으로 끝나고 터미널 에뮬레이터는 기본적으로 페이스트를 문자별로 bash에 공급하기 때문에 발생합니다. 이 과정에서 bash는 실제로 기계의 인간 타이피스트를 알지 못합니다.

필자는 일반적으로 복사 붙여 넣기를 할 때 줄 바꿈이 포함되지 않도록주의를 기울이지 만 붙여 넣기 전에 bash에 입력하십시오 C-x C-e. $EDITOR빈 파일로 시작해야 합니다. 해당 파일에 저장하고 종료하면 bash가 실행됩니다. 이제 명령을 편집기에 붙여 넣어 더 조작하고 한 번에 실행할 수 있습니다.


-1

나는 회사와 관련이 없으며 매우 만족스러운 고객입니다. 이 터미널 프로그램을 시도 http://www.emtec.com/zoc/index.html을 . 사용 가능한 Mac 버전도 있습니다.

이 답변을 위반하는 경우 SE 규칙을 알려 주시면 답변을 삭제하십시오.

편집하다:

다른 답변을 올바르게 이해하면이 문제는 터미널 프로그램으로 인해 발생할 수 있습니다. ZOC 터미널 프로그램은 작업을 위해 완벽하게 설계된 전문 소프트웨어입니다. 추가 문자없이 선택한 텍스트를 붙여 넣습니다. 별도의 텍스트 파일로 세션을 기록 할 수 있습니다. 그리고 더 많은

최신 정보:

터미널 프로그램에는 옵션이 Paste without final 'newline'있습니다. 도움이 될 수 있습니다.


3
적어도 그것이 질문에 어떻게 대답하는지 말해주십시오
Stéphane Chazelas

해당 터미널에서 실행중인 쉘 프롬프트에서 줄 바꾸기 또는 캐리지 리턴 문자가 포함 된 문자열을 붙여 넣으면 어떻게됩니까? 쉘이 명령을 바로 실행하지 않으면 (여기에서 요청한 것처럼) 어떻게 수행합니까? 선택에서 해당 문자를 제거합니까? bash 에서 ^ V 문자를 삽입하여 이스케이프 처리 합니까?
Stéphane Chazelas

2
따라서 스팸처럼 보입니다 (이 사이트를 스팸으로 만들려는 의도는 아니라고 확신합니다). 질문에 대답하지 않고 관련 상용 제품에 대한 광고 일뿐입니다.
Stéphane Chazelas

2
@AlBundy, security.stackexchange.com/q/39118 (Stephane의 답변에서 언급)에서 논의 된 익스플로잇 과 거기에서 찾을 수있는 링크를 시도하여 좋아하는 터미널 클라이언트 가이 문제를 해결하는지 확인하십시오 . 그것이 당신을 보호한다면, 당신은 그것을 추천 할 좋은 근거가 있습니다 (답변에 테스트의 세부 사항을 제공하십시오).
Alexis

일반적으로 문제는 선택한 내용에 줄 바꿈 포함 된다는 것 입니다. "선택한 텍스트를 붙여 넣기"는 다른 터미널 에뮬레이터의 일반적인 동작과 어떻게 다릅니 까?
Peter Cordes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.