이 bash 명령줄을 지우려면 왜 12자를 입력해야 합니까?

이 bash 명령줄을 지우려면 왜 12자를 입력해야 합니까?

xterm 터미널(80열 x 24줄)을 열고 를 실행하여 터미널의 파일 이름을 가져 $ bash --norc --noprofile옵니다 $ tty. 출력은 입니다 /dev/pts/9.

다른 터미널에서 실행합니다.

$ printf foo >/dev/pts/9

foo첫 번째 터미널의 쉘 명령줄에 인쇄됩니다. 실행을 누르면
( 함수 이름으로 제공됨 ) 삭제되지 않습니다. 11개의 공백을 삽입하고 를 누르면 공백이 제거되지만 는 제거되지 않습니다 . 12개의 공백을 삽입하고 를 누르면 공백도 제거됩니다 .C-uunix-line-discard$ bind -P | grep -i c-ufoo
C-ufoo
C-ufoo

여기에 이미지 설명을 입력하세요.

커서가 바로 뒤에 있을 때 눌렀을 때 왜 삭제할 수 없고 foo, 삭제하려면 왜 12자를 입력해야 하나요?C-u


환경:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.6 LTS
Release:        16.04
Codename:       xenial

$ bash --version | head -n1
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)

$ xterm -version
XTerm(322)

답변1

다른 프로그램이 tty 사이의 통신 foo에 인쇄할 때 /dev/pts/9쉘은 교환에 참여하지 않으며 인쇄된 문자 수를 알 수 없으며 문자가 인쇄되었는지 여부도 알 수 없습니다. 쉘은 여전히 ​​삭제할 문자가 없다고 생각합니다. 실제로 foo터미널로 인쇄해서 백스페이스 키로 삭제하려고 하면 동작하지 않습니다. 셸은 존재하지 않는 콘텐츠를 삭제하려고 시도하지 않습니다.

--norc --noprofile 명령을 사용하여 터미널에서 이를 시도해 보십시오.

bash-4.3$ printf 'some text'

얻으려면 :

some textbash-4.3$

백스페이스 키는 현재 아무것도 삭제하지 않습니다. 아무것도 삭제되지 않습니다 ctrl-u. 일부 문자(최대 11자)를 입력하면 ctrl-u입력한 내용만 삭제됩니다. (백스페이스 키도 마찬가지) 그러나 문자가 11개보다 많으면 명령은 ctrl-u줄의 시작이라고 생각되는 부분(많은 문자를 지우는 더 빠른 방법)으로 돌아가서 다음 프롬프트가 남습니다.

some textb

제 생각에는 이것은 버그로 간주될 수 있습니다(bash 5.0에는 여전히 존재합니다). 그러나 이 옵션을 사용하지 않으면 bash-5에서 20자(OP의 경우 18자)로 변경됩니다 --norc --noprofile(IMnshO에 대한 중요한 질문이 아니라 이유를 찾으려고 노력하지 않았습니다).

관련 정보