Resumo
Quando eu crio uma nova sessão tmux, meu prompt é extraído de uma configuração bash padrão e preciso executar manualmente source ~/.bashrc
meu prompt personalizado.
Análise
Estou usando uma máquina RHEL 7. Comecei a notar esse comportamento depois de uma atualização do bash há algum tempo, mas não consegui fazer a pergunta até agora (e não tenho certeza de qual atualização isso começou a acontecer).
Por exemplo, personalizei meu prompt para ficar assim:
[user@hostname ~]$
Sempre que inicio uma nova sessão do tmux, ele usa o que parece ser o padrão do bash:
-sh-4.2$
Uma execução rápida source ~/.bashrc
sempre resolve o problema, mas é irritante ter que fazer isso toda vez que quero consertar algo pequeno. Alguma idéia de como fazer com que o tmux faça isso automaticamente novamente?
Se precisar de mais informações, ficarei feliz em fornecer.
tmux.conf
Para referência, tenho meu tmux.conf
arquivo abaixo, embora dificilmente seja o que você poderia chamar de personalizado.
setw -g mode-keys vi
# reload tmux.conf
bind r source-file ~/.tmux.conf \; display-message " ✱ ~/.tmux.conf is reloaded"
Responder1
Isso está relacionado aos arquivos de inicialização do Bash. Por padrão, ~/.bashrc
é usado em uminterativo, sem loginconcha. Não será originado em um shell de login. Tmux usa umshell de loginpor padrão. Conseqüentemente, os shells iniciados por tmux skip ~/.bashrc
.
default-command
comando shellO padrão é uma string vazia,que instrui o tmux a criar um shell de loginusando o valor da
default-shell
opção.
Arquivos de inicialização para Bash,
- modo de login:
/etc/profile
~/.bash_profile
,~/.bash_login
,~/.profile
(único primeiro que existe)
- interativo sem login:
/etc/bash.bashrc
(alguns Linux; não no Mac OS X)~/.bashrc
- não interativo:
- arquivo de origem em
$BASH_ENV
- arquivo de origem em
Solução
O estranho requisito de carregamento interativo e sem login também confunde as pessoas em outras situações. Omelhor soluçãoé alterar o requisito de carregamento de ~/.bashrc
comoapenas interativo, que é exatamente o que algumas distros, como o Ubuntu, estão fazendo.
# write content below into ~/.profile, or ~/.bash_profile
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Esta deve ser a solução que você deseja. E eu recomendo que todos os usuários do Bash configurem isso no perfil.
Atualizar: as configurações acima são copiadas do Ubuntu. Parece que eles optam por carregar .bashrc
em um shell de login, independentemente de estar dentro de um shell interativo ou não.
Se você quiser detectar um shell interativo, use $PS1
.
if [ -n "$BASH_VERSION" -a -n "$PS1" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Referências
Responder2
Pelo que eu sei, por padrão tmux
executa um shell de login. Quando bash
é invocado como um shell de login interativo, ele procura por ~/.bash_profile
, ~/.bash_login
e ~/.profile
. Então você tem que colocar source ~/.bashrc
um desses arquivos.
Outra forma de resolver esse problema é colocar no seu arquivo .tmux.conf
a linha:
set-option -g default-shell "/bin/bash"
Responder3
Adicionando o seguinte a .tmux.conf
:
set-option -g default-shell "/bin/bash"
NÃOproduzir o resultado desejado.
Somente quando a adição source "$HOME/.bashrc"
ao ~/.bash_profile
resultado pretendido é alcançada.
Isso funcionará em uma sessão tmux ativa ao abrir uma nova janela ou painel, e também ao desanexar e abrir uma nova sessão tmux.
Testado em:
VERSION="16.04.2 LTS (Xenial Xerus)"
tmux 2.1
Responder4
Modifique seu $HOME/.tmux.conf
arquivo com o seguinte:
set-option -g default-shell "/usr/bin/bash"
set-option -g default-command bash
Isso deve cobrir tudo. Enquanto você está nisso, por que não colocar o dotfile na $HOME/.config/tmux
pasta a que ele pertence, sem o ponto. E adicione saída colorida e uma ligação de tecla de recarga a $HOME/.config/tmux/tmux.conf
:
set -g default-terminal "screen256color"
bind r source-file "${HOME}/.config/tmux/tmux.conf"
Se tmux -V
< 3.1, adicione um alias para $HOME/.bashrc
carregar o arquivo de configuração deste local:
alias tmux="tmux -f ${HOME}/.config/tmux/tmux.conf"
Ou faça uma configuração para todo o sistema em /etc/tmux.conf
, o local padrão.