Le nuove sessioni di tmux non generano il file bashrc


17

Sommario

Quando creo una nuova sessione di tmux, il mio prompt viene estratto da una configurazione bash predefinita e devo eseguire manualmente il source ~/.bashrcmio prompt personalizzato.

Analisi

Sto usando una macchina RHEL 7. Ho iniziato a notare questo comportamento dopo un aggiornamento bash qualche tempo fa, ma finora non sono riuscito a porre la domanda (e non sono sicuro di quale aggiornamento questo abbia avuto inizio).

Ad esempio, ho personalizzato il mio prompt in modo che assomigli a:

[user@hostname ~]$

Ogni volta che inizio una nuova sessione di tmux, utilizza quello che sembra essere il valore predefinito di bash:

-sh-4.2$

Una rapida esecuzione source ~/.bashrcrisolve sempre il problema, ma è fastidioso doverlo fare ogni volta che voglio riparare qualcosa di piccolo. Qualche idea su come ottenere tmux per farlo di nuovo automaticamente?

Se sono necessarie ulteriori informazioni, sono lieto di fornire.

tmux.conf

Per riferimento, ho il mio tmux.conffile qui sotto, anche se non è quello che potresti chiamare personalizzato.

setw -g mode-keys vi

# reload tmux.conf
bind r source-file ~/.tmux.conf \; display-message " ✱ ~/.tmux.conf is reloaded"

Risposte:


19

Per quanto ne so, per impostazione predefinita tmuxesegue una shell di accesso. Quando bashviene invocata come una shell di login interattiva, si cerca ~/.bash_profile, ~/.bash_logine ~/.profile. Quindi devi inserire source ~/.bashrcuno di quei file.

Un altro modo per risolvere questo problema è inserire nel tuo file .tmux.confla riga:

set-option -g default-shell "/bin/bash"

1
Ho aggiunto la source ~/.bashrclinea alla mia .bash_profile, ho provato a disconnettermi e riconnettermi, a creare una nuova sessione di tmux, ma nessuna modifica. Qualche idea?
Justin W. Flory,

1
Prova a mettere nel tuo file .tmux.confla linea set-option -g default-shell "/bin/bash". Questo dovrebbe risolvere il tuo problema (almeno lo spero)!
andreatsh

Dopo aver ricaricato la mia configurazione di tmux, questo ha risolto il mio problema! Vuoi modificare la tua risposta o crearne una nuova? Sarei felice di contrassegnarlo come accettato. :)
Justin W. Flory,

Sei gentile, ho modificato rapidamente la mia risposta!
andreatsh,

2
Nota per gli utenti macOS: se hai installato bashtramite Homebrew e questo non funziona, "/bin/bash"passa a "/usr/local/bin/bash".

5

Questo è correlato ai file Bash init. Per impostazione predefinita, ~/.bashrcviene utilizzato in una shell interattiva senza accesso . Non verrà fornito in una shell di accesso. Tmux utilizza una shell di login per impostazione predefinita. Quindi, le shell sono state avviate da tmux skip ~/.bashrc.

default-command shell-command

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

File Init per Bash,

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

Soluzione

Lo strano requisito interattivo di caricamento senza accesso confonde anche le persone in altre situazioni. La soluzione migliore è cambiare il requisito di caricamento ~/.bashrccome solo interattivo , che è esattamente ciò che stanno facendo alcune distro, 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 ogni utente di Bash di installarlo nel profilo.

Riferimenti


2

Aggiungendo quanto segue a .tmux.conf:

set-option -g default-shell "/bin/bash"

NON produce il risultato desiderato.

Solo quando si aggiunge source "$HOME/.bashrc"a~/.bash_profile risultato desiderato si ottiene.

Questo funzionerà su una sessione tmux attiva quando si apre una nuova finestra o riquadro e anche quando si stacca e si apre una nuova sessione tmux.

Testato su:

VERSION="16.04.2 LTS (Xenial Xerus)"
tmux 2.1
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.