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"

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"

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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.