Resumen

Resumen

Resumen

Cuando creo una nueva sesión tmux, mi mensaje proviene de una configuración de bash predeterminada y tengo que ejecutarlo manualmente source ~/.bashrcpara 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 ~/.bashrcsiempre 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.confarchivo 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-commandcomando de shell

El 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-shellopción.

Archivos de inicio para Bash,

  1. modo de inicio de sesión:
    1. /etc/profile
    2. ~/.bash_profile, ~/.bash_login, ~/.profile(único el primero que existe)
  2. interactivo no iniciar sesión:
    1. /etc/bash.bashrc(algunos Linux; no en Mac OS X)
    2. ~/.bashrc
  3. no interactivo:
    1. archivo fuente en$BASH_ENV

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 .bashrcen 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 tmuxse ejecuta un shell de inicio de sesión. Cuando bashse invoca como shell de inicio de sesión interactivo, busca ~/.bash_profile, ~/.bash_loginy ~/.profile. Entonces tienes que poner source ~/.bashrcuno de esos archivos.

Otra forma de resolver este problema es poner en su archivo .tmux.confla 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_profileresultado 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.confarchivo 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/tmuxcarpeta 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/.bashrccargar 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.

información relacionada