OBSD ksh에는 PS1 앞에 빈 줄이 있습니다.
PS1="\n[\u@\h] \w\n\$"
문제는 가상 환경을 활성화할 때 pyenv가 가상 환경 이름 앞에 해당 이름을 추가한다는 것입니다. pyenv 활성화 스크립트의 관련 부분은 다음과 같습니다.
PS1="(porcupine) ${PS1:-}"
이것은 빈 줄을 먹고 회전합니다.
[myusername@myhostname] ~/some/path $ echo foo
foo
[myusername@myhostname] ~/some/path $
입력하다
(virtual-environment-name)
[myusername@myhostname] ~/some/path $ echo foo
foo
(virtual-environment-name)
[myusername@myhostname] ~/some/path $
이게 짜증나서 tput으로 고치려고 했어요:
PS1_TEXT="[\u@\h] \w\n\$ "
PS1="$(tput sc il1 nw)$(tput rc DO 1)\n$PS1_TEXT"
이렇게 하면 커서가 가상 환경 이름 위의 줄로 이동하여 빈 줄로 만든 다음 돌아가서 원래 PS1에 유지됩니다.
거의 작동되는데 터미널 창 하단을 클릭하면 가상 환경 이름이 사라집니다. 이게 또 짜증나네요.
답변1
올바른 pyenv 소스를 확인했다고 가정하면 pyenv 간섭 없이 PYENV_VIRTUALENV_DISABLE_PROMPT=1
사용자 정의를 설정하고 구축하는 것이 좋습니다 .PS1
활성화된 환경을 사용할 수 있어야 합니다 PYENV_VIRTUAL_ENV
(또는 활성화 후 설정된 내용을 확인하는 데 사용한 것 env
).
꽤 흥미롭습니다. 이 변수에 대한 많은 질문/토론과 수정을 제안하는 "지원 중단"을 찾을 수 있습니다. 예를 들어https://stackoverflow.com/questions/74611317/enable-pyenv-virtualenv-prompt-at-terminal
이 지원 중단은 최근 제거되었으며 pyenv는 즉각적인 수정을 유지할 계획입니다(이런 방식으로 비활성화하는 것을 포함). 바라보다https://github.com/pyenv/pyenv-virtualenv/commit/77a7644ff7a7a624ba4dfebe5c7441a57be3cc48.
추신: $()
ksh에서도 bash와 동일한 방식으로 작동한다고 가정하면 tput
출력 대신 as 명령을 추가하면 쉘 성능에 불필요한 영향을 미칠 수 있습니다.
답변2
감사해요. 나중에 OBSD ksh의 세부 정보는 .kshrc에 있습니다.
VIRTUAL_ENV_DISABLE_PROMPT=1
function prompt_command {
if [[ -n ${VIRTUAL_ENV} ]]; then
print -r "(${VIRTUAL_ENV##*/})"
fi
print -n "[\u@\h] \w\n\$ "
}
PS1='\n$(prompt_command)'
VIRTUAL_ENV_DISABLE_PROMPT
환경 변수 및 실행 시 작은따옴표를 사용한다는 점에 유의하세요 prompt_command
(질문에 큰따옴표를 잘못 입력했습니다).