.bashrc/.profile is not loaded on new tmux session (or window) — why?

前端 未结 6 1772
轻奢々
轻奢々 2020-12-12 23:17

When tmux starts or opens a new window, it does not load my .profile or .bashrc. I end up typing . ~/.bashrc every time. Is there a

6条回答
  •  别那么骄傲
    2020-12-13 00:03

    Former answers provided solutions but didn't explain the reason. Here it is.

    This is related to the Bash init files. By default, ~/.bashrc is used in an interactive, non-login shell. It won't be sourced in a login shell. Tmux uses a login shell by default. Hence, shells started by tmux skip ~/.bashrc.

    default-command shell-command

    The default is an empty string, which instructs tmux to create a login shell using the value of the default-shell option.

    Init files for Bash,

    1. login mode:
      1. /etc/profile
      2. ~/.bash_profile, ~/.bash_login, ~/.profile (only first one that exists)
    2. interactive non-login:
      1. /etc/bash.bashrc (some Linux; not on Mac OS X)
      2. ~/.bashrc
    3. non-interactive:
      1. source file in $BASH_ENV

    The weird interactive, non-login loading requirement confuses people in other situations as well. The best solution is to change the loading requirement of ~/.bashrc as interactive only, which is exactly what some distros, like Ubuntu, are doing.

    # 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
    

    This should be the solution you desire. And I recommend every Bash user setup this in the profile.

    References

    • Unix Shell Initialization
    • man tmux

提交回复
热议问题