터미널에 일부 명령을 붙여 넣으면 명령이 자동으로 실행되는 경우도 있고("Enter" 키를 누르는 것처럼) 때로는 그렇지 않은 경우도 있습니다.
나는 오랫동안 Linux를 사용해 왔으며 많은 배포판의 다양한 콘솔에 수천 개의 명령을 붙여넣었지만 붙여넣은 명령이 자동으로 실행되는지 여전히 알 수 없습니다.
이 행동을 유발하는 요인은 무엇입니까?
답변1
복사 중인 텍스트의 캐리지 리턴 문자로 인해 자동 실행이 시작되었습니다.
다른 예를 들어보겠습니다. 다음 줄을 한 번에 복사하여 터미널에 붙여넣으세요.
echo "Hello";
echo "World";
터미널을 보면 다음 내용이 표시되지 않습니다.
$ echo "Hello";
echo "World";
다음과 같은 내용이 표시됩니다(그리고 다음과 같은 줄도 표시될 수 있음 World
).
$ echo "Hello";
Hello
$ echo "World";
모든 입력이 붙여넣어질 때까지 기다리는 대신 첫 번째 줄이 실행됩니다(같은 이유로 두 번째 줄도 실행될 수도 있고 실행되지 않을 수도 있습니다). RETURN
두 줄 사이에 문자가 있기 때문입니다 .
ENTER
키보드의 키를 누르면 ASCII 값이 13
. 터미널은 즉시 문자를 감지하고 지금까지 입력한 작업을 수행하기 위한 특별한 지침이 있음을 알고 있습니다.
컴퓨터에 저장하거나 화면에 인쇄할 때 RETURN
문자는 알파벳의 다른 문자, 숫자 또는 기호와 같습니다. 이 문자는 백스페이스 키를 사용하여 삭제하거나 다른 일반 문자처럼 클립보드에 복사할 수 있습니다.
유일한 차이점은 브라우저가 해당 문자를 볼 때 대신에인쇄보이는 문자는 다르게 처리되어야 하며 다음 텍스트 세트를 다음 줄로 이동하기 위한 특별한 지침이 있어야 합니다. 이러한 이유로 문자 RETURN
와 SPACE
문자(ascii 32
) 및 기타 거의 사용되지 않는 문자를 "인쇄되지 않는 문자"라고 합니다.
때로는 웹사이트에서 텍스트를 복사할 때 끝에 캐리지 리턴을 복사하지 않고 텍스트만 복사하는 것이 어려울 수 있습니다(그리고 페이지의 스타일로 인해 더 어려워지는 경우가 많습니다).
실험 시간!
아래에는 문제를 설명하고 "연습"할 수 있는 두 가지 명령이 있습니다. 화살표 앞에 커서를 놓고 echo
강조 표시가 화살표 앞에 올 때까지 드래그합니다.
echo "Wait for my signal...";<- End cursor here right after the semicolon
이제 두 번째 명령을 시도해 보세요. 앞에서 시작하여 echo
커서가 두 번째 줄에 올 때까지 화살표 바로 앞에 드래그합니다 <-
. 복사하여 터미널에 붙여넣으세요.
echo 'Go go go!';
<- End cursor here right before the arrow
브라우저에 따라서는 선택한 텍스트가 두 줄을 초과하는지조차 확인하지 못할 수도 있습니다. 하지만 터미널에 붙여넣으면 RETURN
복사된 텍스트에서 문자를 찾았기 때문에 해당 줄이 실행되는 것을 볼 수 있습니다.
답변2
텍스트를 선택할 때 줄 끝에 (보이지 않는) 개행 문자를 포함하면 붙여넣은 텍스트에 나타납니다. 내가 아는 한 이는 모든 터미널 에뮬레이터에서 일관됩니다. 개행 문자는 "검증"이라고 부르는 작업을 수행합니다.
일부 시스템(예: IBM 3270과 같은 동기화 터미널을 사용하는 시스템)에서는 키 입력을 Enter통해 모든 변경 사항을 호스트 시스템에 복사하여 화면을 "검증"합니다.
답변3
이 행동을 유발하는 요인은 무엇입니까?
개행 문자.
답변4
다른 답변은 이 질문에 매우 잘 대답하지만 Windows에서 PuTTY를 사용할 때 실수로 이런 일이 발생하지 않도록 하는 솔루션도 공유하고 싶다고 생각했습니다.https://serverfault.com/questions/731022/prevent-accidental-execution-of-commands-in-linux-if-pasting-text- Contains-one더 알아보기.