나는 최근 터미널을 보는 즐거움을 위해 멋진 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
파일이 마지막입니다.
그게 다야.
이게 도움이 되길 바란다