쉘에 붙여넣을 때 후행 개행 문자가 명령을 실행하도록 합니다.

쉘에 붙여넣을 때 후행 개행 문자가 명령을 실행하도록 합니다.

몇 달 전 시스템 업데이트로 인해 enter터미널에 명령을 붙여 넣을 때 쉘이 더 이상 후행 줄 바꿈을 해석하지 못했습니다. 예를 들어, ls프롬프트에 글을 쓴 다음 마우스를 사용하여 ls줄 끝까지 선택했다면 마우스 가운데 버튼을 클릭하여 셸에 붙여넣고 명령을 실행할 수 있었으면 좋겠습니다 ls. 이것은 제가 수년 동안 사용해 온 표준 동작입니다.

그러나 내 시스템은 더 이상 이 작업을 수행하지 않습니다. 를 붙여넣을 수 ls있고 개행 문자도 붙여넣은 것을 볼 수 있습니다. 커서가 다음 줄로 이동하기 때문입니다. 하지만 그럼에도 불구하고 명령을 누를 때까지 명령이 실행되지 않습니다 enter. 애니메이션 GIF로 인해 주의가 산만해질 수 있음):

설명된 효과를 보여주는 애니메이션 GIF

위의 애니메이션에서는 ls작성된 행을 선택한 다음 선택을 취소 ls하고 마우스 가운데 버튼을 클릭하여 붙여넣는 것을 볼 수 있습니다. 커서가 다음 줄로 어떻게 이동하는지 확인하세요. 그러나 명령은 해당 지점에서 실행되지 않고 키를 ls누른 후에만 실행됩니다 .enter

정말 이상한 점은 이것이 내 터미널 에뮬레이터( terminator)의 문제가 아니라는 것입니다. 다른 컴퓨터에 ssh를 연결하면(localhost에 ssh를 연결하는 경우는 아님) 동일한 터미널이 예상대로 개행 문자를 해석합니다. 따라서 내 로컬 셸에 일종의 설정이 있어야 합니다.

게다가 예상대로 작동하는 환경이 하나 있는데 바로 read내장 환경입니다. 여기에서 후행 줄 바꿈이 포함된 줄을 선택하면 이를 대기 read프롬프트에 붙여 넣을 수 있으며 후행 줄 바꿈은 EOL 문자로 처리되어 read반환됩니다. 그렇다면 특정 환경 외부에서는 왜 작동하지 않습니까?

GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)이 모든 것은 in 모드를 사용하는 Arch Linux 시스템에 있습니다 emacs. 더욱 혼란스러운 점은 bash, zsh또는 를 사용할 때 이 문제가 발생 fish하지만 , 또는 ksh을 사용할 때는 이 문제가 발생 하지 않는다는 것입니다 . 마지막 네 개의 셸에는 내가 원하는 동작이 있으며 붙여넣은 줄은 즉시 실행됩니다. 이것 은 관련 이 있을 수 있나요 ?dashtcshcshreadline

원하는 동작을 복원하고 셸에 붙여넣은 줄 바꿈을 해석하려면 어떻게 해야 합니까?

답변1

RedHat의 "버그가 아님" 보고서에 포착된 동작 변경 사항https://bugzilla.redhat.com/show_bug.cgi?id=1954366, readline설정을 참조합니다 enable-bracketed-paste.

수정 set enable-bracketed-paste Off하려면 추가하세요 . .inputrc하지만 애초에 깨지지 말았어야 했어요.

실제로 이 설정을 추가하면 ~/.inputrc문제가 해결됩니다. 포함된 줄바꿈을 붙여넣으면 붙여넣은 명령이 다시 실행됩니다.

인용하다

이곳과 다른 곳의 많은 숙련된 사용자는 사용자에게 이렇게 하지 말라고 강력히 경고합니다.예를 들어,@murulu쓰다댓글에서저것, "나는 이에 반대할 것을 강력히 권고합니다. 이렇게 하면 실수로 깨지거나 위험한 명령을 실행하는 것을 방지할 수 있습니다. 즉, Enter 키를 눌러 발생하는 불편함이 보상된다는 의미입니다."

관련 정보