Resumo

Resumo

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 ~/.bashrcmeu 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 ~/.bashrcsempre 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.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"

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-commandcomando shell

O padrão é uma string vazia,que instrui o tmux a criar um shell de loginusando o valor da default-shellopção.

Arquivos de inicialização para Bash,

  1. modo de login:
    1. /etc/profile
    2. ~/.bash_profile, ~/.bash_login, ~/.profile(único primeiro que existe)
  2. interativo sem login:
    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 login também confunde as pessoas em outras situações. Omelhor soluçãoé alterar o requisito de carregamento de ~/.bashrccomoapenas 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 .bashrcem 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 tmuxexecuta um shell de login. Quando bashé invocado como um shell de login interativo, ele procura por ~/.bash_profile, ~/.bash_logine ~/.profile. Então você tem que colocar source ~/.bashrcum desses arquivos.

Outra forma de resolver esse problema é colocar no seu arquivo .tmux.confa 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_profileresultado 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.confarquivo 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/tmuxpasta 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/.bashrccarregar 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.

informação relacionada