まとめ

まとめ

まとめ

新しい tmux セッションを作成すると、プロンプトはデフォルトの bash 構成から取得され、source ~/.bashrcカスタマイズされたプロンプトを手動で実行する必要があります。

分析

私は RHEL 7 マシンを使用しています。しばらく前に bash を更新した後、この動作に気づき始めましたが、今まで質問することができませんでした (また、どの更新の頃からこの現象が発生し始めたのかはわかりません)。

たとえば、プロンプトを次のようにカスタマイズしました。

[user@hostname ~]$

新しい tmux セッションを開始するたびに、bash のデフォルトと思われるものが使用されるようです。

-sh-4.2$

をすばやく実行すると、source ~/.bashrc常に問題が解決しますが、小さな問題を修正するたびにこれを実行する必要があるのは面倒です。tmux でこれを再び自動的に実行する方法はありますか?

さらに情報が必要な場合は、喜んで提供いたします。

tmux.conf

参考までに、tmux.conf以下に私のファイルを掲載しますが、これはカスタムと呼べるものとはほとんど言えません。

setw -g mode-keys vi

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

答え1

これはBashのinitファイルに関連しています。デフォルトでは~/.bashrcインタラクティブ、非ログインシェル。ログインシェルではソース化されません。Tmuxはログインシェルデフォルトでは、 tmux によって起動されたシェルは をスキップします~/.bashrc

default-commandシェルコマンド

デフォルトは空の文字列です。tmuxにログインシェルを作成するよう指示するオプションの値を使用しますdefault-shell

Bashの初期化ファイル、

  1. ログインモード:
    1. /etc/profile
    2. ~/.bash_profile、、~/.bash_login~/.profile存在する最初のもののみ)
  2. 相互の作用 非ログイン:
    1. /etc/bash.bashrc(一部の Linux では、Mac OS X では利用できません)
    2. ~/.bashrc
  3. 非インタラクティブ:
    1. ソースファイル$BASH_ENV

解決

奇妙なインタラクティブな非ログイン読み込み要件は、他の状況でも人々を混乱させます。最善の解決策~/.bashrcの積載要件を変更することですインタラクティブのみこれはまさに、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

これがあなたが望む解決策のはずです。そして、私はすべての Bash ユーザーにプロファイルでこれを設定することをお勧めします。


アップデート: 上記の設定は Ubuntu からコピーしたものです。.bashrc対話型シェル内にあるかどうかに関係なく、ログイン シェルを読み込むことを選択しているようです。

対話型シェルを検出する場合は、 を使用します$PS1

if [ -n "$BASH_VERSION" -a -n "$PS1" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

参考文献

答え2

私の知る限り、デフォルトではtmuxログイン シェルが実行されます。 が対話型ログイン シェルとして呼び出されると、、 、bashが検索されます。そのため、これらのファイルのいずれかを配置する必要があります。~/.bash_profile~/.bash_login~/.profilesource ~/.bashrc

この問題を解決する別の方法は、ファイルに.tmux.conf次の行を追加することです。

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

答え3

以下を追加します.tmux.conf:

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

ではない望ましい結果が得られます。

意図した結果source "$HOME/.bashrc"に追加した場合のみ達成されます。~/.bash_profile

これは、新しいウィンドウまたはペインを開くとき、およびデタッチして新しい tmux セッションを開くときに、アクティブな tmux セッションで機能します。

テスト済み:

VERSION="16.04.2 LTS (Xenial Xerus)"
tmux 2.1

答え4

$HOME/.tmux.confファイルを次のように変更します。

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

これで完了です。ついでに、ドットファイルを$HOME/.config/tmuxドットなしで適切なフォルダに置いてみてはいかがでしょうか。そして、カラー出力とリロード キー バインディングを次のように追加します$HOME/.config/tmux/tmux.conf

set -g default-terminal "screen256color"

bind r source-file "${HOME}/.config/tmux/tmux.conf"

3.1 未満の場合、この場所から構成ファイルを読み込むためtmux -Vのエイリアスを追加します。$HOME/.bashrc

alias tmux="tmux -f ${HOME}/.config/tmux/tmux.conf"

/etc/tmux.confまたは、デフォルトの場所である でシステム全体の構成にします。

関連情報