터미널에 입력한 문자는 어디에 저장되나요?

터미널에 입력한 문자는 어디에 저장되나요?

xterm 및 bash 4.3을 사용하여 (의사) 터미널 pts/10에서 입력합니다(█는 커서임).

test@debian:~$ ps
  PID TTY          TIME CMD
13128 pts/10   00:00:02 bash
21037 pts/10   00:00:00 ps
test@debian:~$ ls
Mail  directory  file
test@debian:~$ ls directory
file1  file2  file3
test@debian:~$ ls █

(보시다시피 뒤에 공백이 있습니다 ls.)

그런 다음 다른 터미널에서 백스페이스 키를 보냅니다.

test@debian:~$ echo -ne "\b" > /dev/pts/10

이제 터미널 pts/10에는 다음이 있습니다.

test@debian:~$ ls█

우리는 directory다음과 같은 결과를 얻었습니다.

test@debian:~$ lsdirectory█

Enter를 누르면 "디렉토리"가 나열됩니다.

file1  file2  file3
test@debian:~$ █

물론 일반적인 입력에서는 lsdirectory"명령을 찾을 수 없음" 오류가 발생합니다. 공간이 어딘가에 저장되었습니다. 어디?

답변1

쉘의 명령줄 편집기는 공간을 절약합니다. 실제로 명령줄을 구성하는 문자 중 입력한 모든 문자가 저장됩니다.

명령을 실행하기 전에 화면의 내용을 다시 읽어 쉘이 어떤 명령을 실행할지 알고 있다고 생각하실지 궁금합니다. 그러나 실제로는 그렇지 않습니다. 더욱이 터미널은 화면의 내용을 다시 읽을 수 있는 방법을 반드시 제공하지도 않으므로 쉘이 원하더라도 그렇게 할 수 있을 것이라고 기대할 수 없습니다.

또한: 동일한 터미널을 동시에 사용하는 여러 애플리케이션에 주의해야 합니다. 이 경우 쉘은 터미널에서 명령줄 편집기를 실행하고 있으며 다른 곳에서 동일한 터미널로 공백을 에코합니다. 여러분의 쉘은 여러분이 이 작업을 수행했다는 사실을 전혀 모르고, 커서 위치에 대한 쉘의 이해는 이제 화면상의 커서의 실제 위치와 동기화되지 않습니다. 이는 명령줄을 올바르게 표시하는 쉘의 기능을 혼란스럽게 하고 손상시킬 수 있습니다. 화살표 키와 메뉴 기반 탭 완성 등을 사용하여 명령줄을 편집하는 경우 쉘은 커서를 이동하고 명령줄의 일부를 다시 표시하려고 하지만 커서가 생각하는 위치에 있지 않기 때문에 실수를 하게 됩니다. 이다.

관련 정보