이 bash 명령 줄을 지우려면 12 문자를 삽입 해야하는 이유는 무엇입니까?


14

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

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

$ printf foo >/dev/pts/9

foo첫 번째 터미널의 쉘 명령 행에 인쇄됩니다.
를 눌러 C-u실행하면 unix-line-discard(에서 제공 한 기능 이름 $ bind -P | grep -i c-u) foo이 제거되지 않습니다.
11 개의 공백을 삽입하고을 누르면 C-u공백이 제거되지만 제거되지는 않습니다 foo.
12 개의 공백을 삽입하고을 누르면 C-u공백뿐만 아니라 제거됩니다 foo.

여기에 이미지 설명을 입력하십시오

커서 바로 다음에 커서를 foo눌렀을 때 제거 할 수없는 C-u이유와 제거하기 위해 12자를 삽입해야하는 이유는 무엇입니까?


환경:

$ 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)

답변:


19

다른 프로그램을 인쇄 할 때 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

그것은 버그 IMO로 간주 될 수 있습니다 (여전히 bash 5.0에 있음). 그러나 --norc --noprofile옵션을 사용하지 않으면 bash-5에서 20 (OP의 경우 18) 문자로 변경 됩니다 (이 중요한 문제는 IMnshO가 아닌 이유를 찾지 못했습니다).


답변 감사합니다. 와 함께 두 번째 버그와 관련하여 17 자 이상을 삽입 $ printf 'some text'하지 않고도 bash 5.0에서 재현 할 수 있습니다 --norc --noprofile.
user938271

@ user938271 맞습니다.이 문제는 20 자로 재현되었습니다. 정보가 답변에 추가되었습니다. 감사합니다.
Isaac
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.