.bashrc / .profile não está carregado na nova sessão do tmux (ou janela) - por quê?


94

Quando o tmux inicia ou abre uma nova janela, ele não carrega o meu .profileou .bashrc. Acabo digitando . ~/.bashrctodas as vezes. Existe uma maneira de fazer isso acontecer automaticamente?

Respostas:


146

Sim, no final do seu .bash_profile, coloque a linha:

. ~/.bashrc

Isso origina automaticamente o arquivo rc sob as circunstâncias em que normalmente só processaria o perfil.

As regras de quando bash determinados arquivos são executados são complicadas e dependem do tipo de shell que está sendo iniciado (login / não-login, interativo ou não e assim por diante), junto com os argumentos da linha de comando e variáveis ​​de ambiente.

Você pode vê-los na man bashsaída, apenas procure INVOCATION- você provavelmente precisará de algum tempo para digerir e decodificar :-)


2
O problema com esta solução é que em alguns sistemas, .bashrc chama .bash_profile.
Honza

1
Deixe-me me corrigir: os sistemas não têm .bashrc chamando .bash_profile, mas você precisa ter certeza de que não está fazendo isso sozinho.
Honza

1
@Honza, essa seria uma configuração muito incomum, já que quase sempre é o contrário. Alguém certamente poderia fazer isso dessa maneira, mas teríamos que questionar sua sanidade :-)
paxdiablo

2
Na verdade, descobri que planejei fazer isso dessa forma (e me esqueci). Você pode questionar minha sanidade ...;)
Honza

3
Achei que essa fosse a questão ....bashrc/.profile is not loaded on new tmux session (or window) — why?
dylnmc

16

A execução do bash funcionou explicitamente para mim, adicionando esta linha ao meu arquivo ~ / .tmux.conf:

set-option -g default-command "exec /bin/bash"

1
Isso funcionou para mim! No entanto, você não precisa da parte "exec". Eu adicionei a seguinte linha ao meu ~/.tmux.conf : set -g default-command "/bin/bash". Obrigado cara.
Joker

Mas, você tem alguma ideia de por que isso está acontecendo? De repente, percebi isso depois de atualizar do Ubuntu 16.04 para 18.04.2. Essa é a única diferença que consigo pensar. Além disso, notei que algumas das configurações quebraram e tive que seguir alguma nova sintaxe (parece que o tmux também foi atualizado, mas não me lembro da versão do tmux que usei para verificar anteriormente).
Joker

6

As respostas anteriores forneciam soluções, mas não explicavam o motivo. Aqui está.

Isso está relacionado aos arquivos Bash init. Por padrão, ~/.bashrcé usado em um shell interativo sem login . Não será originado em um shell de login. Tmux usa um shell de login por padrão. Conseqüentemente, shells iniciados por tmux skip ~/.bashrc.

default-command comando shell

O padrão é uma string vazia, que instrui o tmux a criar um shell de login usando 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(Apenas um primeiro que existe)
  2. sem login interativo :
    1. /etc/bash.bashrc (algum Linux; não no Mac OS X)
    2. ~/.bashrc
  3. não interativo:
    1. arquivo fonte em $BASH_ENV

O estranho requisito de carregamento interativo sem login confunde as pessoas em outras situações também. A melhor solução é mudar a exigência de carga de ~/.bashrccomo única interativa , que é exatamente o que algumas distribuições, 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.

Referências



1

A solução que funcionou para mim é a seguinte:

  • Crie um .bash_profilearquivo se você não tiver um em~
  • No final da .bash_profilecolocação source ~/.bashrcousource ~/.profile
  • Reinicie o tmux.

O problema agora deve ser corrigido.


0

Eu tive o mesmo problema e as soluções até agora não funcionaram para mim. A solução que acabou funcionando para mim pode ser encontrada aqui .

Resumindo, as tmuxjanelas / sessões usam um shell de login que procura ~/.profileentre outros arquivos quando é iniciado.

O que eu queria era que zsh começasse com cada nova tmuxjanela, então coloquei exec zshna parte inferior da minha ~/.profile.

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.