tmux가 PS1 프롬프트에 색상을 지정하지 않음

tmux가 PS1 프롬프트에 색상을 지정하지 않음

나는 최근 터미널을 보는 즐거움을 위해 멋진 Solarized 색상을 수용하기 위해 PS1 변수를 변경하기로 결정했습니다. tmux 세션이 아닐 때는 모든 것이 잘 작동합니다! 무지개, 조랑말, 유니콘 그리고 독특한 힌트! 시원한!

그러나 문제는 tmux에 있습니다. PS1의 값이 정확히 내가 기대한 값이고 tmux가 실행되지 않을 때와 동일한지, 즉 \[\033]0;\w\007\]\[\[\]\]\u\[\]@\[\[\]\]\h\[\]:\[\]\W\[\]$ \[\].

내 .bash_profile의 모든 별칭 등도 예상대로 실행됩니다. tmux는 또한 색상을 정상적으로 표시하고 echo -ne "\033[1;33m hi"예상대로 작동합니다 gls --color.

내 .bash_profile의 현재 관련 줄은 입니다 export PS1="\[\033]0;\w\007\]\[\[\]\]\u\[\]@\[\[\]\]\h\[\]:\[\]\W\[\]$ \[\]". 원래는 일부 조건 등을 처리하기 위해 .bash_prompt 파일에서 스크립트를 가져오고 있었지만. 더 간단한 버전으로 되돌려 보았습니다.

실행하면 bash프롬프트 색상이 표시되지만 각 창에서 수행해야 합니다. export PS1=[that long string I've already posted]하지 않을 것이다.

내 .tmux.conf는 다음과 같습니다.

set-option -g default-command "reattach-to-user-namespace -l /usr/local/bin/bash"
set -g default-terminal "xterm-256color"
set-window-option -g automatic-rename on
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"

.bash_profile 관련 부분:

export TERM="xterm-256color"
if which tmux >/dev/null 2>&1; then
    test -z "$TMUX" && (tmux attach || tmux new-session)
fi

저는 macOS Sierra, iTerm 2를 사용하고 있으며 현재 홈브루 버전의 bash와 시스템 bash(현재 홈브루 버전 사용) tmux 2.4를 모두 사용해 보았습니다.

또한 touch testing_touch_from_bash_profile두 개의 창이 있는 tmux 세션에 .bash_profile을 배치하고 한 개의 창을 종료하고 하나를 열고 파일이 실제로 생성되었는지 확인했습니다.

echo $TERM반품 xterm-256color.

설정 변경을 테스트하기 위해 tmux를 종료할 때 tmux를 종료하고 현재 tmux 프로세스가 ps -ax | grep tmux.

이상한 점은 .bash_prompt 스크립트를 가져오면 모든 tmux 창에서 이 작업을 수행할 때마다 색상도 변경된다는 것입니다.

나는 본 적이https://stackoverflow.com/questions/21005966/tmux-prompt-not-following-normal-bash-prompt-ps1-w그리고 .tmux.conf의 첫 번째 줄에서 bash 호출 뒤에 --login 플래그를 추가해 보세요. tmux를 시작하면 tmux new bash첫 번째 창이 색조화되지만 후속 창은 색조화되지 않습니다.

$PS1 변수는 필드 색상을 제외한 모든 부분에서 존중되는 것 같습니다.

누구든지 아이디어가 있나요?

답변1

내 컴퓨터에서 솔루션을 추가하는 것이 었습니다.

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

도착하다 ~/.tmux.conf.

답변2

이 문제에 대한 나의 해결책은 다음과 같습니다.

force_color_prompt=yes

.bashrc. 이제 내 tmux 프롬프트에 색상이 있습니다.

답변3

PS1은 흑백 출력도 제공합니다.

그러나 내 것으로 다시 전환하면 색상이 표시되므로 내가 사용한 차이점을 알아낼 수 있을 것입니다.

$ echo $PS1
\[\033[01;31m\]\t \[\033[01;32m\]durrantm \[\033[02;36m\]\h \[\033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"` \[\033[00;33m\]$(git_branch)\[\033[00m\]\n\$

git_branch는 내 bash 기능입니다.

git_branch () { 
  git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}

당신과 나의 것:

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

이것은 OSX와 Ubuntu에서도 동일하게 작동합니다.

답변4

Ubuntu 20.04를 사용하는 동안 이 문제가 발생했습니다.

하지만뱅키의 대답source ~/.bashrc나를 위해 일했는데 로그인할 때마다 항상 특정하는 내 자신을 발견했습니다.멀티플렉서쉘은 다음과 같습니다평가됨의 의견.

내가 해결한 방법은 다음과 같습니다.:

.tmux먼저 ~/.tmux.conf.

다음으로 사용하려는 구성을 입력하세요.멀티플렉서넣어서 저장하세요. 나에게는 다음과 같은 구성이 필요했습니다.GNU 화면Ubuntu에서는 기본적으로 패키지를 사용하므로 파일 내용을 ~/.bashrc해당 ~/.tmux.conf파일에 복사했습니다. 이렇게 하면 구성을 편집해야 하는 경우멀티플렉서, 나는 이것을 조작하지 않을 것입니다GNU 화면.

노트~/.bashrc: 관심사 분리에 관심이 없다면 이 단계를 건너뛰고 이 파일을 사용해도 됩니다.

~/.bash_profile그런 다음 파일을 , ~/.bash_login및 파일 에 추가합니다 ~/.profile. 파일 맨 아래에 다음을 추가해야 합니다.

source "$HOME/.tmux.conf"

또는

source "$HOME/.bashrc"

예는 다음과 같습니다.

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

source "$HOME/.tmux.conf"

노트: ~/.bash_profile파일이 먼저, ~/.bash_login파일이 두 번째, ~/.profile파일이 마지막입니다.

그게 다야.

이게 도움이 되길 바란다

관련 정보