기록 검색 시 bash 프롬프트에 문제가 발생하는 이유는 무엇입니까? [복사]

기록 검색 시 bash 프롬프트에 문제가 발생하는 이유는 무엇입니까? [복사]

종종 명령 기록을 보기 시작할 때 표시된 명령의 일부 문자가 제거되지 않습니다. 예를 들면 다음과 같습니다.

무슨 일이에요:

prompt$ some_command
prompt$ some_commanother_command

무슨 일이 일어나야 할까요:

prompt$ some_command
prompt$ another_command

이 문자는 제거할 수 없으며 bash는 명령을 실행할 때 이를 무시합니다. 또한 새 프롬프트가 표시되면( Enter예: 누르기 후) 사라집니다.

나는 내 직장에서 Linux를 사용하는 다른 사람들에게 물었고 그들은 때때로 이 문제에 직면하지만 해결 방법을 모른다고 말했습니다.

나는 Ubuntu 11.10을 가지고 있고 guake를 사용하고 있습니다. 이 내 꺼야 PS1:

\e[0;31m\u \A ${PWD##*/}\e[0;32m$(parse_git_branch)\e[0;31m$\e[m

parse_git_branch어디

parse_git_branch () {
    git name-rev HEAD 2> /dev/null | sed 's#HEAD\ \(.*\)# (\1)#'
}

내가 아는 한, 내 동료들은 덜 "멋진" PS1을 사용해도 이 문제를 겪고 있습니다.

답변1

PS1 의 길이가 0인 부분 주위에 사용됩니다 \[...\]. 이는 bash가 올바른 프롬프트 길이를 얻는 데 도움이 됩니다. 이 방법을 사용하더라도 멀티바이트 문자를 사용하면 명령줄이 깨질 수 있습니다(적어도 내 경우에는 그랬습니다). 이 경우 탭하는 것도 Ctrl+L도움이 됩니다(그러나 동시에 화면이 지워집니다).

답변2

인쇄할 수 없는 문자를 이스케이프해야 합니다.

좋아요

PS1="\[\e[36m\]\W ⇨ \[\e[m\] "

나쁜

PS1="\[\e[36m\]\W ⇨ [\e[m\] "

관련 정보