bash $PS1의 색상 코드가 tmux에서 작동하지 않습니다.

bash $PS1의 색상 코드가 tmux에서 작동하지 않습니다.

내 안에 컬러 힌트를 설정했습니다 .bash_profile.

export PS1="\[\033[0:33m\]testprompt@\h\[\033[00m\] "

tmux 외부에서는 컬러 프롬프트 판독값이 표시됩니다 testprompt@hostname.

tmux 세션 내에서 텍스트는 설정되지만 프롬프트에는 색상이 지정되지 않습니다. 다른 프로그램에서는 색상이 정상적으로 출력됩니다.

다음 위치에 컬러 터미널이 설정되어 있습니다 .tmux.conf.

set -g default-terminal "xterm-256color"

macOS에서 기본 터미널을 사용하고 있습니다. Bash와 tmux는 Homebrew 패키지 관리자의 최신 버전입니다. tmux는 내부 및 외부에서 동일한 버전의 bash를 실행합니다.

다음 환경 변수는 tmux 내부와 외부에서 동일합니다.

$ echo $PS1
\[\033[0:33m\]testprompt@\h\[\033[00m\]`
$ echo $TERM
xterm-256color
$ echo $SHELL
/usr/local/bin/bash
$ echo $BASH_VERSION
4.4.23(1)-release

ls -la색상은 및 와 같은 tmux의 다른 명령과 잘 맞습니다 git log. 쉘에는 fishtmux에 색상 힌트가 있습니다. tmux에서 새 인스턴스를 다시 열면 bash아무런 차이가 없습니다. 여전히 색상이 없습니다. .bash_profile읽기 및 $PS1설정. 힌트 색상은 화면 및 tmux 외부의 "원시" bash에서는 작동하지만 tmux에서는 작동하지 않습니다. 내가 무엇을 놓치고 있나요?

답변1

TERM터미널 유형이 이라고 실수로 가정하기보다는 항상 터미널 유형과 일치하도록 환경 변수를 설정해야 하는 것은 사실이지만 환경 변수는 프롬프트 시퀀스에 포함된 리터럴 컨트롤과 아무 관련이 없기 xterm-*때문에 실제로 질문과 관련이 없습니다 .TERM

문제는 제어 시퀀스에서 매개변수가 아닌 하위 매개변수를 사용하고 있다는 것입니다. 매개변수는 ;ECMA-48:1991 § 5.4.2에 지정된 대로 세미콜론으로 구분됩니다 . 하위 매개변수는 :ITU-T T.416:1993 § 13.1.8에 지정된 대로 콜론으로 구분됩니다 .

외부 터미널 에뮬레이터는 하위 인수를 인수로 처리하는 bodge를 사용하여 하위 인수를 처리하는 에뮬레이터 중 하나입니다. 따라서 CSI 0 : 3 3 mSGR 0 및 SGR 33을 고려합니다. 다른 터미널 에뮬레이터는 제어 시퀀스를 올바르게 처리하는 데 더 엄격하거나 아직 하위 매개변수 지원을 구현하지 않았습니다. 하위 매개변수가 33인 SGR 0, 일반 SGR 0(첫 번째 숫자 사용) 또는 그냥 SGR 33(마지막 숫자 사용)으로 생각할 수 있습니다.

몇 년 전만 해도 터미널 에뮬레이터는 하위 매개변수를 전혀 지원하지 않았으므로 앞으로는 모두 하위 매개변수를 올바르게 지원하게 될 것입니다. 이 경우 팁은 간단합니다.보편적으로잘못된. ☺

%F{yellow}개인적으로 나는 프롬프트에서와 같이 시퀀스를 사용할 수 있고 제어 시퀀스가 ​​무엇인지, 올바르게 사용하는 방법 및 공백이 아닌 것으로 표시하는 방법에 대해 걱정할 필요가 없는 Z 셸을 선호합니다 .

답변2

이것티먹스 FAQ지적

tmux 내부의 TERM은 "screen", "tmux" 또는 이와 유사한 것(예: "tmux-256color")이어야 합니다. 존재하지 않는 문제를 신고하려고 애쓰지 마세요!

xterm-256color와 다릅니다 tmux-256color.

관련 정보