.bashrc / .profile non viene caricato nella nuova sessione (o finestra) di tmux - perché?


94

Quando tmux si avvia o apre una nuova finestra, non carica il mio .profileo .bashrc. Finisco per digitare . ~/.bashrcogni volta. C'è un modo per farlo accadere automaticamente?

Risposte:


146

Sì, alla fine del tuo .bash_profile, metti la riga:

. ~/.bashrc

Questo genera automaticamente il file rc in quelle circostanze in cui normalmente elaborerebbe solo il profilo.

Le regole su quando vengono basheseguiti determinati file sono complicate e dipendono dal tipo di shell avviata (login / non login, interattiva o meno, e così via), insieme agli argomenti della riga di comando e alle variabili d'ambiente.

Puoi vederli man bashnell'output, basta cercare INVOCATION- probabilmente avrai bisogno di un po 'di tempo per digerirlo e decodificarlo :-)


2
Il problema con questa soluzione è che su alcuni sistemi .bashrc chiama .bash_profile.
Honza

1
Permettimi di correggermi: i sistemi non hanno .bashrc che chiama .bash_profile, ma devi assicurarti di non farlo da solo.
Honza

1
@Honza, sarebbe una configurazione molto insolita poiché è quasi sempre il contrario. Qualcuno potrebbe certamente organizzare in questo modo, ma dovremmo mettere in dubbio la loro sanità mentale :-)
paxdiablo

2
In effetti, si è scoperto che ho deciso di farlo in quel modo (e me ne sono dimenticato). Sei il benvenuto a mettere in dubbio la mia sanità mentale ...;)
Honza

3
Pensavo fosse questa la domanda ....bashrc/.profile is not loaded on new tmux session (or window) — why?
dylnmc

16

L'esecuzione di bash ha funzionato esplicitamente per me, aggiungendo questa riga al mio file ~ / .tmux.conf:

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

1
Questo ha funzionato per me! Tuttavia, non hai bisogno della parte "exec". Ho aggiunto la seguente riga alla mia ~/.tmux.conf : set -g default-command "/bin/bash". Grazie compagno.
joker

Ma hai idea del perché sta succedendo? L'ho notato improvvisamente dopo l'aggiornamento da Ubuntu 16.04 a 18.04.2. Questa è l'unica differenza a cui riesco a pensare. Inoltre, ho notato che alcune delle configurazioni non funzionavano e ho dovuto conformarmi a una nuova sintassi (sembra che anche tmux sia stato aggiornato, ma non ricordo la versione di tmux che ho usato in precedenza per verificare).
joker

6

Le risposte precedenti fornivano soluzioni ma non spiegavano il motivo. Ecco qui.

Ciò è correlato ai file di inizializzazione di Bash. Per impostazione predefinita, ~/.bashrcviene utilizzato in una shell interattiva e non di accesso . Non verrà fornito in una shell di accesso. Tmux utilizza una shell di login per impostazione predefinita. Quindi, le shell avviate da tmux skip ~/.bashrc.

default-command comando di shell

L'impostazione predefinita è una stringa vuota, che istruisce tmux a creare una shell di login utilizzando il valore default-shelldell'opzione.

File di inizializzazione per Bash,

  1. modalità di accesso:
    1. /etc/profile
    2. ~/.bash_profile, ~/.bash_login, ~/.profile(Solo prima che esiste)
  2. non accesso interattivo :
    1. /etc/bash.bashrc (alcuni Linux; non su Mac OS X)
    2. ~/.bashrc
  3. non interattivo:
    1. file sorgente in $BASH_ENV

Lo strano requisito di caricamento interattivo e senza login confonde le persone anche in altre situazioni. La soluzione migliore è modificare i requisiti di caricamento solo~/.bashrc come interattivo , che è esattamente ciò che stanno facendo alcune distribuzioni, come Ubuntu.

# 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

Questa dovrebbe essere la soluzione che desideri. E consiglio a tutti gli utenti di Bash di impostarlo nel profilo.

Riferimenti



1

La soluzione che ha funzionato per me è la seguente:

  • Crea un .bash_profilefile se non ne hai uno in~
  • Alla fine di .bash_profileput source ~/.bashrcosource ~/.profile
  • Riavvia tmux.

Il problema dovrebbe ora essere risolto.


0

Ho avuto lo stesso problema e le soluzioni finora non hanno funzionato per me. La soluzione che ha finito per funzionare per me può essere trovata qui .

In breve, le tmuxfinestre / sessioni utilizzano una shell di login che cerca ~/.profiletra gli altri file all'avvio.

Quello che volevo era che zsh iniziasse con ogni nuova tmuxfinestra, quindi ho messo exec zshin fondo al mio ~/.profile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.