모든 또는 대부분의 Linux 터미널에는 오랫동안 나를 괴롭혔던 이상한 동작이 있습니다. 이것이 버그인지, 의도적인 것인지, 아니면 구성 문제인지는 확실하지 않습니다. 그럼 여기서 먼저 묻겠습니다.
재현 단계
- 터미널을 엽니다.
- 선택 사항: 를 실행하여
export PS1='~ \$'
이 설정을 표준화합니다. 이 설정을 자유롭게 실험해 보세요. - 달리기
echo -n hello
. - 이전 명령으로 이동하려면 "위로" 키를 사용하세요.
- 빈 프롬프트로 돌아가려면 "아래쪽" 화살표 키를 사용하세요.
- 다시 "위로"를 사용하세요.
예상되는
(이것은 내 $PS1에서 남겨진 것입니다 ~ $
.)
실행 후 echo -n hello
:
~ $ echo -n hello
hello~ $
"위쪽" 화살표 키 다음:
~ $ echo -n hello
hello~ $ echo -n hello
"아래쪽" 화살표 키 다음:
~ $ echo -n hello
hello~ $
두 번째 "위쪽" 화살표 키 다음:
~ $ echo -n hello
hello~ $ echo -n hello
실제
(이것은 내 자신의 $PS1 에서 남은 것입니다 ~ $
.) (처음 두 단계는 예상대로입니다)
"아래쪽" 화살표 키 다음:
~ $ echo -n hello
hell
두 번째 "위쪽" 화살표 키 다음:
~ $ echo -n hello
hellecho -n hello
다양성
- 다른 $PS1 값을 사용하세요.
- 에코에 다른 길이의 문자열을 사용하십시오.
- 역사를 추적해 보세요. 나에게 특정 역사적 가치는 다른 가치와 다른 영향을 미칩니다.
내 터미널
나는 사용하고있다
Konsole 버전 21.12.3
그런데 예전에 다른 터미널에서도 이런 일이 일어나는 걸 본 것 같아요. KDE "Konsole"이 이 동작에 책임이 있는지는 모르겠습니다.
추가 정보
(아래 댓글에 대한 답변)
물론아니요사용자 "루트"에게 발생했습니다!
처음에는 내 사용자와 사용자의 차이점을 확인했습니다 root
. 하지만 이는 단지 $PS1
설정의 차이 때문인 것으로 밝혀졌습니다 . 이 값을 '~ \$'
, 또는 로 정규화한 후 '${debian_chroot:+($debian_chroot)}\[\033[01;34m\]\w\[\033[00m\] \$ '
이제 루트와 나 자신에 대해 동일한 동작이 표시됩니다.
이는 완전히 별도의 설정이 있는 도커 컨테이너 내부의 bash에서도 발생합니다.
링크
참고로 여기서 이슈를 열었습니다.https://bugs.kde.org/show_bug.cgi?id=464384
답변1
이것은 프롬프트가 현재 줄의 가장 왼쪽 위치에서 시작하고 아래쪽을 누르면 위치 5로 이동하고 줄 끝까지 지워진다고 생각하는 bash(실제로는 readline)입니다.
아래쪽 화살표를 누르면 bash는 다음을 터미널로 보냅니다.
\r\33[C\33[C\33[C\33[C\33[K
이것은 현재 라인의 가장 왼쪽 위치로 이동된 캐리지 리턴 문자입니다. 4개(프롬프트 길이)의 CUF(커서 전진) 제어 시퀀스와 1개의 EL(Erase Line) 제어 시퀀스, 매개변수 0(기본값)은 현재 커서를 위치에서 지웁니다. 줄 끝까지.