PS1 위에 앞에 추가한 후 남은 개행 문자를 추가합니다.

PS1 위에 앞에 추가한 후 남은 개행 문자를 추가합니다.

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://github.com/pyenv/pyenv-virtualenv/blob/c85c1c9ed520d28cbb34e10e1fe82c6ee37130bc/bin/pyenv-sh-activate#L244

꽤 흥미롭습니다. 이 변수에 대한 많은 질문/토론과 수정을 제안하는 "지원 중단"을 찾을 수 있습니다. 예를 들어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(질문에 큰따옴표를 잘못 입력했습니다).

관련 정보