PS1 줄 바꿈이 포함되면 줄 바꿈이 끊어집니다.

PS1 줄 바꿈이 포함되면 줄 바꿈이 끊어집니다.

나는 최근에 Linux를 사용하기 시작했고 (기본 이름만이 아닌) 작업 디렉터리를 볼 수 있으면 유용할 것이라고 생각하여 파일을 다음 ~/.bashrc과 같이 변경했습니다.

#
# ~/.bashrc
#

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

alias ls='ls --color=auto'
LGREEN="\[$(tput setaf 10)\]"
DGREEN="\[$(tput setaf 28)\]"
GREEN="\[$(tput setaf 2)\]"
RESET="\[$(tput setaf 255)\]"
TEAL="\[$(tput setaf 123)\]"
PS1="${RESET}/${LGREEN}\u@${GREEN}\t${DGREEN} \w ${RESET}\n\\ \[\[\033[5m\]${TEAL}>>\[\033[0m\]\]" 

생각할 수 있는 모든 것을 시도했습니다. 에 이스케이프 문자를 래핑하고 \[\]에 색상 변수를 다시 래핑했지만 \[\]아무 것도 작동하지 않습니다. 같은 일이 발생합니다. 한 줄에 들어갈 수 없을 정도로 너무 긴 명령을 입력하면 대신 적절하게 래핑되어 다음 줄에 계속되면 자체적으로 겹쳐서 깨진 것처럼 보입니다.

답변1

\n나는 이스케이프가 프롬프트 이스케이프 중 하나로 명시적으로 나열되어 있기 때문에 거기에서 줄바꿈이 작동해야 한다고 생각합니다 . 쉘은 또한 해석하기 쉬워야 하며, 다음 줄로 점프할 때 프롬프트 길이를 0으로 재설정하기만 하면 됩니다.

제가 테스트한 바에 따르면 두 배로 늘어나 결국 문제를 일으키는 것으로 나타 \[\[났습니다 \]\].

여기에는 전체 마지막 섹션 주위에 하나의 그룹이 있고 \[ \]그 안에 동일한 콘텐츠로 구성된 두 그룹이 있습니다.

\[\[\033[5m\]${TEAL}>>\[\033[0m\]\]
  ^^^^^^^^^^^         ^^^^^^^^^^^

아마도 바깥쪽을 제거해야 할 것입니다.

\[\033[5m\]${TEAL}>>\[\033[0m\]

설정할 때 큰따옴표를 사용하므로 색상 코드는 괜찮습니다 PS1. 따라서 색상 변수는 할당 시 확장되고 \[ \]이스케이프가 작동합니다.


두 줄 프롬프트가 실제로 작동하지 않으면 언제든지 첫 번째 줄을 인쇄할 수 있습니다 PROMPT_COMMAND.

이와 같은 것이 PROMPT_COMMAND='printf "${RESET}/${LGREEN}$USER@${GREEN}$(date +%T)${DGREEN} $PWD ${RESET}\n"'작동해야 하지만 이 경우에는 \[ \].

관련 정보