Resumen
Cuando creo una nueva sesión tmux, mi mensaje proviene de una configuración de bash predeterminada y tengo que ejecutarlo manualmente source ~/.bashrc
para mi mensaje personalizado.
Análisis
Estoy usando una máquina RHEL 7. Comencé a notar este comportamiento después de una actualización de bash hace un tiempo, pero no he podido hacer la pregunta hasta ahora (y no estoy seguro de en qué actualización comenzó a suceder esto).
Por ejemplo, he personalizado mi mensaje para que se vea así:
[user@hostname ~]$
Cada vez que inicio una nueva sesión de tmux, utiliza lo que parece ser el valor predeterminado de bash:
-sh-4.2$
Una ejecución rápida source ~/.bashrc
siempre soluciona el problema, pero es molesto tener que hacer esto cada vez que quiero arreglar algo pequeño. ¿Alguna idea sobre cómo hacer que tmux vuelva a hacer esto automáticamente?
Si se necesita más información, estaré encantado de proporcionársela.
tmux.conf
Como referencia, tengo mi tmux.conf
archivo a continuación, aunque no es lo que se podría llamar personalizado.
setw -g mode-keys vi
# reload tmux.conf
bind r source-file ~/.tmux.conf \; display-message " ✱ ~/.tmux.conf is reloaded"
Respuesta1
Esto está relacionado con los archivos de inicio de Bash. Por defecto,~/.bashrc
se utiliza en uninteractivo, sin inicio de sesióncaparazón. No se obtendrá en un shell de inicio de sesión. Tmux utiliza unshell de inicio de sesiónpor defecto. Por lo tanto, los shells iniciados por tmux se saltan ~/.bashrc
.
default-command
comando de shellEl valor predeterminado es una cadena vacía,que indica a tmux que cree un shell de inicio de sesiónusando el valor de la
default-shell
opción.
Archivos de inicio para Bash,
- modo de inicio de sesión:
/etc/profile
~/.bash_profile
,~/.bash_login
,~/.profile
(único el primero que existe)
- interactivo no iniciar sesión:
/etc/bash.bashrc
(algunos Linux; no en Mac OS X)~/.bashrc
- no interactivo:
- archivo fuente en
$BASH_ENV
- archivo fuente en
Solución
El extraño requisito de carga interactivo y sin inicio de sesión también confunde a las personas en otras situaciones. Elmejor soluciónes cambiar el requisito de carga de~/.bashrc
comosolo interactivo, que es exactamente lo que hacen algunas distribuciones, como 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
Esta debería ser la solución que deseas. Y recomiendo a todos los usuarios de Bash que configuren esto en el perfil.
Actualizar: la configuración anterior se copia de Ubuntu. Parece que eligen cargar .bashrc
en un shell de inicio de sesión sin importar si está dentro de un shell interactivo o no.
Si desea detectar un shell interactivo, utilice $PS1
.
if [ -n "$BASH_VERSION" -a -n "$PS1" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Referencias
Respuesta2
Hasta donde yo sé, de forma predeterminada tmux
se ejecuta un shell de inicio de sesión. Cuando bash
se invoca como shell de inicio de sesión interactivo, busca ~/.bash_profile
, ~/.bash_login
y ~/.profile
. Entonces tienes que poner source ~/.bashrc
uno de esos archivos.
Otra forma de resolver este problema es poner en su archivo .tmux.conf
la línea:
set-option -g default-shell "/bin/bash"
Respuesta3
Añadiendo lo siguiente a .tmux.conf
:
set-option -g default-shell "/bin/bash"
NO ESproducir el resultado deseado.
Sólo cuando se suma source "$HOME/.bashrc"
al ~/.bash_profile
resultado deseado se logra.
Esto funcionará en una sesión tmux activa al abrir una nueva ventana o panel, y también al desconectar y abrir una nueva sesión tmux.
Probado en:
VERSION="16.04.2 LTS (Xenial Xerus)"
tmux 2.1
Respuesta4
Modifique su $HOME/.tmux.conf
archivo con lo siguiente:
set-option -g default-shell "/usr/bin/bash"
set-option -g default-command bash
Eso debería cubrirlo. Mientras lo hace, ¿por qué no colocar el archivo de puntos en la $HOME/.config/tmux
carpeta a la que pertenece sin el punto? Y agregue salida de color y un enlace de tecla de recarga a $HOME/.config/tmux/tmux.conf
:
set -g default-terminal "screen256color"
bind r source-file "${HOME}/.config/tmux/tmux.conf"
Si tmux -V
< 3.1, agregue un alias para $HOME/.bashrc
cargar el archivo de configuración desde esta ubicación:
alias tmux="tmux -f ${HOME}/.config/tmux/tmux.conf"
O conviértalo en una configuración para todo el sistema en /etc/tmux.conf
, la ubicación predeterminada.