팁: 스위치 명령을 통해 줄 제거 [중복]

팁: 스위치 명령을 통해 줄 제거 [중복]

프롬프트를 원하는 대로 변경해 보았지만 가장 최근에 입력한 명령을 전환하면(키 화살표 사용) 프롬프트가 포함된 전체 줄이 삭제되고 가장 최근에 입력한 명령과 함께 프롬프트의 일부 문자만 삭제되는 경우가 있습니다. 명령 명령은 여전히 ​​다음과 같습니다.

예상 출력:

bucky in [~]: cd ..

산출:

buccd ..

"buc"는 프롬프트의 일부이고 "cd .."는 내가 입력한 가장 최근 명령입니다.

내 팁:

PS1="\[\033[0;34m\u\] \[\033[0;37min\] \[\033[1;32m[\]\[\033[0;31m\w\]\[\033[1;32m]\]\[\033[0;37m:\] "

다음은 시각적 이미지입니다.

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

필요한 경우 Ubuntu 16.04를 사용합니다.

답변1

이는 프롬프트의 인쇄 부분 \u in \w:이스케이프된 대괄호 안에 있기 때문입니다. 괄호는 일반적으로 인쇄되지 않는 문자 주위에 배치되어 bash에 커서를 이동하지 않도록 지시하여 프롬프트 크기를 올바르게 계산합니다. 이제 커서가 인쇄 부분으로 올바르게 이동하지 않습니다.

.bashrc프롬프트를 덮어쓰는 대신 프롬프트를 설정하는 부분을 수정하는 것이 좋습니다... #이 줄의 주석 처리를 제거(제거)할 수 있습니다.

#force_color_prompt=yes

그런 다음 이 코드 조각의 두 번째 줄을 수정합니다.

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

그래서 그것은 말한다 :

PS1='${debian_chroot:+($debian_chroot)}\[\033[00;34m\]\u \[\033[0;37m\]in \[\033[01;32m\][\[\033[0;31m\]\w\[\033[1;32m\]]\[\033[0;37m\]: '

또는 원하는 경우 파일 끝에 재정의를 추가하면 됩니다.

PS1='\[\033[00;34m\]\u \[\033[0;37m\]in \[\033[01;32m\][\[\033[0;31m\]\w\[\033[1;32m\]]\[\033[0;37m\]: '

이것은 Ubuntu 16.04에서 당신이 원한다고 생각하는 것을 달성하고 당신이 설명하는 방식을 깨뜨리지 않습니다. (나는 PS1을 플레이할 때 이것을 경험한 적이 있습니다!)

답변2

대괄호를 잘못 사용했습니다.

PS1="\[\033[0;34m\]\u \[\033[0;37m\]in \[\033[1;32m\][\[\033[0;31m\]\w\[\033[1;32m\]]\[\033[0;37m\]: "

답변3

당신을 혼란스럽게 만드는 것은 괄호입니다. 특히 작업 디렉터리 시작 부분에 이스케이프되지 않은 "["가 있습니다. "[\w" 이것을 시도해 보세요:

PS1="\033[0;34m\u \033[1;32m\[[\033[0;31m\w\033[1;32m]\033[0;37m: "

내 터미널에서 원하는 것을 정확하게 수행합니다.

관련 정보