검색 기록을 볼 때 내 사용자 정의 bash 프롬프트가 실패하는 이유는 무엇입니까?

검색 기록을 볼 때 내 사용자 정의 bash 프롬프트가 실패하는 이유는 무엇입니까?

현재 git 브랜치, npm 패키지 버전 정보, 내가 있는 가상 환경 등을 볼 수 있도록 사용자 정의 bash 프롬프트를 설정했습니다. 그러나 기록을 찾아보기 위해 위쪽 화살표 키를 누르면 프롬프트에 결함이 있습니다.

일반적으로 다음과 같습니다.

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

그러나 기록을 탐색하면 람다 기호와 명령 사이의 공백이 사라집니다.

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

가끔 이런 일이 발생하는데 왜 그런지 모르겠습니다. 나는 단지 작은 공간에 대해 까다로웠던 것 같지만, bash 프롬프트를 구성하는 데 많은 시간을 소비한 후에는 그것이 완벽해 보이길 원했습니다.

이것이 내 .bashrc의 모습입니다. 차이점이 있다면 Windows 버전의 Git Bash(btw)를 사용하고 있습니다.

bashPrompt() {
SYMBOL="λ"

COUNT=(`find ./ -maxdepth 1 -name "package.json"`)

if [ ${#COUNT[@]} -gt 0 ]; then
    NPM_PACKAGE_INFO="($(node -p -e "require('./package.json').version"))"
else
    NPM_PACKAGE_INFO=""
fi

if [ ! -z "$CONDA_DEFAULT_ENV" ]; then
    ENV=" ($CONDA_DEFAULT_ENV)"
else
    ENV=""
fi

if [ -d .git ]; then
    if [ -z "$(git status --porcelain)" ]; then 
        echo "[\[\e[0;36;40m\u@\H\]\[\e[0;37;40m]\]\[\e[1;34;40m${ENV}\] \[\e[1;31;40m\w\]\[\e[1;32;40m$(__git_ps1)\] \[\e[0;37;40m${NPM_PACKAGE_INFO}\]\n\[\e[0;37;40m${SYMBOL}\] "
    else 
        echo "[\[\e[0;36;40m\u@\H\]\[\e[0;37;40m]\]\[\e[1;34;40m${ENV}\] \[\e[1;31;40m\w\]\[\e[1;33;40m$(__git_ps1)\] \[\e[0;37;40m${NPM_PACKAGE_INFO}\]\n\[\e[0;37;40m${SYMBOL}\] "
    fi
else
    echo "[\[\e[0;36;40m\u@\H\]\[\e[0;37;40m]\]\[\e[1;34;40m${ENV}\] \[\e[1;31;40m\w\] \[\e[0;37;40m${NPM_PACKAGE_INFO}\]\n\[\e[0;37;40m${SYMBOL}\] "
fi;

}

PROMPT_COMMAND='PS1="$(bash프롬프트)"'

답변1

문자열 중 하나는 다음과 같습니다.

"[\[\e[0;36;40m\u@\H\]\[\e[0;37;40m]\]\[\e[1;34;40m${ENV}\] \[\e[1;31;40m\w\]\[\e[1;32;40m$(__git_ps1)\] \[\e[0;37;40m${NPM_PACKAGE_INFO}\]\n\[\e[0;37;40m${SYMBOL}\] "

\[\]각 텍스트를 쌍 으로 포함합니다 . 개행 문자를 제거 \n하고 PS1을 사용해 보면 다음과 같습니다.

PS1="[\[\e[0;36;40m\u@\H\]\[\e[0;37;40m]\]\[\e[1;34;40m${ENV}\] \[\e[1;31;40m\w\]\[\e[1;32;40m$(__git_ps1)\] \[\e[0;37;40m${NPM_PACKAGE_INFO}\] n\[\e[0;37;40m${SYMBOL}\] "

위쪽 키(위쪽 화살표)를 누르면 대부분의 프롬프트가 기록 명령으로 대체되는 것을 볼 수 있습니다.

줄 간격을 사용하려는 텍스트를 괄호 바깥에 배치하세요.

PS1="[\[\e[0;36;40m\]\u@\H \[\e[0;37;40m]\]\[\e[1;34;40m\]${ENV} \[\e[1;31;40m\]\w\[\e[1;32;40m\]$(__git_ps1) \[\e[0;37;40m\]${NPM_PACKAGE_INFO} n\[\e[0;37;40m\]${SYMBOL} "

그런 다음 다시 시도해 보세요.

작동하면 개행 문자를 추가 \n하고 다시 시도하세요.

여전히 문제가 있는 경우 bash를 4.4.18(현재 버전) 또는 이와 유사한 버전으로 업데이트하세요.

관련 정보