Novas sessões tmux não originam arquivo bashrc

17

Sumário

Quando crio uma nova sessão do tmux, meu prompt é extraído de uma configuração padrão do bash e preciso executar manualmente o source ~/.bashrcmeu prompt personalizado.

Análise

Estou usando uma máquina RHEL 7. Comecei a perceber esse comportamento após uma atualização do bash há algum tempo, mas ainda não fiz a pergunta até agora (e não tenho certeza de qual atualização isso começou a acontecer).

Por exemplo, eu personalizei meu prompt para se parecer com:

[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 ~/.bashrcsempre corrige o problema, mas é irritante que eu tenha que fazer isso toda vez que quiser corrigir algo pequeno. Alguma idéia de como obter o tmux para fazer isso automaticamente novamente?

Se mais alguma informação for necessária, fico feliz em fornecer.

tmux.conf

Para referência, tenho meu tmux.confarquivo 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"
Justin W. Flory
fonte

Respostas:

19

Até onde eu sei, por padrão, tmuxexecuta um shell de login. Quando bashé invocado como um shell de login interativo, ele procura ~/.bash_profile, ~/.bash_logine ~/.profile. Então você precisa colocar source ~/.bashrcum desses arquivos.

Outra maneira de resolver esse problema é colocar no seu arquivo .tmux.confa linha:

set-option -g default-shell "/bin/bash"
andreatsh
fonte
1
Adicionei a source ~/.bashrclinha à minha .bash_profile, tentei sair e entrar novamente, criar uma nova sessão do tmux, mas nenhuma alteração. Alguma ideia?
Justin W. Flory
1
Tente colocar no seu arquivo .tmux.confa linha set-option -g default-shell "/bin/bash". Isso deve resolver seu problema (pelo menos, espero que sim)!
andreatsh
Após recarregar minha configuração do tmux, isso resolveu meu problema! Deseja modificar sua resposta ou criar uma nova? Ficaria feliz em marcá-lo como aceito. :)
Justin W. Flory
Você é gentil, eu rapidamente modifiquei minha resposta!
andreatsh
2
Nota para usuários do macOS: se você instalou bashvia Homebrew e isso não funcionar, mude "/bin/bash"para "/usr/local/bin/bash".
5

Isso está relacionado aos arquivos init do Bash. Por padrão, ~/.bashrcé usado em um shell interativo sem logon . Não será fornecido em um shell de login. O Tmux usa um shell de login por padrão. Portanto, os shells iniciados pelo tmux skip ~/.bashrc.

default-command comando shell

O padrão é uma sequência vazia, que instrui o tmux a criar um shell de login usando o valor da default-shellopção

Arquivos de inicialização para o Bash,

  1. modo de login:
    1. /etc/profile
    2. ~/.bash_profile, ~/.bash_login, ~/.profile(Apenas um primeiro que existe)
  2. não-logon interativo :
    1. /etc/bash.bashrc (alguns Linux; não no Mac OS X)
    2. ~/.bashrc
  3. não interativo:
    1. arquivo de origem em $BASH_ENV

Solução

O estranho requisito de carregamento interativo e sem logon também confunde as pessoas em outras situações. o melhor solução é alterar o requisito de carregamento apenas~/.bashrc como 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

Essa deve ser a solução que você deseja. E eu recomendo que todos os usuários do Bash configurem isso no perfil.

Referências

Simba
fonte
2

Adicionando o seguinte a .tmux.conf:

set-option -g default-shell "/bin/bash"

NÃO produz o resultado desejado.

Somente ao adicionar source "$HOME/.bashrc"a~/.bash_profile resultado pretendido é alcançado.

Isso funcionará em uma sessão ativa do tmux ao abrir uma nova janela ou painel, e também ao desanexar e abrir uma nova sessão do tmux.

Testado em:

VERSION="16.04.2 LTS (Xenial Xerus)"
tmux 2.1
Andres Salgado
fonte