종종 명령 기록을 보기 시작할 때 표시된 명령의 일부 문자가 제거되지 않습니다. 예를 들면 다음과 같습니다.
무슨 일이에요:
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\] "