.bashrc / .profile no se carga en la nueva sesión (o ventana) tmux - ¿por qué?


94

Cuando tmux se inicia o abre una nueva ventana, no carga mi .profileo .bashrc. Termino escribiendo . ~/.bashrctodo el tiempo. ¿Hay alguna forma de que esto suceda automáticamente?

Respuestas:


146

Sí, al final de tu .bash_profile, pon la línea:

. ~/.bashrc

Esto genera automáticamente el archivo rc en aquellas circunstancias en las que normalmente solo procesaría el perfil.

Las reglas sobre cuándo se bashejecutan ciertos archivos son complicadas y dependen del tipo de shell que se inicia (inicio de sesión / no inicio de sesión, interactivo o no, etc.), junto con los argumentos de la línea de comandos y las variables de entorno.

Puede verlos en la man bashsalida, solo busque INVOCATION, probablemente necesitará algo de tiempo para digerirlo y decodificarlo :-)


2
El problema con esta solución es que en algunos sistemas, .bashrc llama a .bash_profile.
Honza

1
Déjame corregirme: los sistemas no tienen .bashrc llamando a .bash_profile, pero debes asegurarte de que no lo estás haciendo tú mismo.
Honza

1
@Honza, esa sería una configuración muy inusual ya que casi siempre es al revés. Alguien ciertamente podría arreglarlo de esa manera, pero tendríamos que cuestionar su cordura :-)
paxdiablo

2
De hecho, resultó que lo había arreglado para hacerlo de esa manera (y lo olvidé). Puedes cuestionar mi cordura ...;)
Honza

3
Pensé que esa era la pregunta ....bashrc/.profile is not loaded on new tmux session (or window) — why?
dylnmc

16

Ejecutar bash funcionó explícitamente para mí, agregando esta línea a mi archivo ~ / .tmux.conf:

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

1
¡Esto funcionó para mí! Sin embargo, no necesita la parte "ejecutiva". He añadido la siguiente línea a ~/.tmux.conf : set -g default-command "/bin/bash". Gracias amigo.
joker

Pero, ¿tienes alguna idea de por qué está pasando esto? De repente me di cuenta de esto después de actualizar de Ubuntu 16.04 a 18.04.2. Ésta es la única diferencia en la que puedo pensar. Además, noté que algunas de las configuraciones se rompieron y tuve que cumplir con una nueva sintaxis (parece que tmux también se actualizó, pero no recuerdo la versión de tmux que usé anteriormente para verificar).
joker

6

Las respuestas anteriores proporcionaron soluciones pero no explicaron el motivo. Aquí está.

Esto está relacionado con los archivos init de Bash. De forma predeterminada, ~/.bashrcse utiliza en un shell interactivo sin inicio de sesión . No se obtendrá en un shell de inicio de sesión. Tmux usa un shell de inicio de sesión por defecto. Por lo tanto, los shells iniciados por tmux skip ~/.bashrc.

default-command comando de shell

El valor predeterminado es una cadena vacía, que indica a tmux que cree un shell de inicio de sesión utilizando el valor de la default-shellopción.

Archivos de inicialización para Bash,

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

El extraño requisito de carga interactivo, sin inicio de sesión, confunde a las personas en otras situaciones también. La mejor solución es cambiar el requisito de carga ~/.bashrccomo interactivo únicamente , que es exactamente lo que están haciendo 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 desea. Y recomiendo a todos los usuarios de Bash que configuren esto en el perfil.

Referencias



1

La solución que funcionó para mí es la siguiente:

  • Cree un .bash_profilearchivo si no tiene uno en~
  • Al final de .bash_profileponer source ~/.bashrcosource ~/.profile
  • Reinicie tmux.

El problema ahora debería solucionarse.


0

Tuve el mismo problema y las soluciones hasta ahora no funcionaron para mí. La solución que terminó funcionando para mí se puede encontrar aquí .

En resumen, las tmuxventanas / sesiones usan un shell de inicio de sesión que busca un~/.profile entre otros archivos cuando se inicia.

Lo que quería era que zsh comenzara con cada nueva tmuxventana, así que puse exec zshen la parte inferior de mi~/.profile .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.