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?
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:
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 :-)
.bashrc/.profile is not loaded on new tmux session (or window) — why?
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"
~/.tmux.conf : set -g default-command "/bin/bash". Grazie compagno.
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-commandcomando di shellL'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,
/etc/profile~/.bash_profile, ~/.bash_login, ~/.profile(Solo prima che esiste)/etc/bash.bashrc (alcuni Linux; non su Mac OS X)~/.bashrc$BASH_ENVLo 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
man tmuxDa questo thread:
sembra che l'uso .bash_profilefunzionerebbe.
$echo case $- in *i*) . ~/.bashrc;; esac >> .bash_profile
La soluzione che ha funzionato per me è la seguente:
.bash_profilefile se non ne hai uno in~.bash_profileput source ~/.bashrcosource ~/.profileIl problema dovrebbe ora essere risolto.
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.