まとめ
新しい 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の初期化ファイル、
- ログインモード:
/etc/profile
~/.bash_profile
、、~/.bash_login
(~/.profile
存在する最初のもののみ)
- 相互の作用 非ログイン:
/etc/bash.bashrc
(一部の Linux では、Mac OS X では利用できません)~/.bashrc
- 非インタラクティブ:
- ソースファイル
$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
参考文献
- Unix シェルの初期化
- シェル起動スクリプト
man tmux
答え2
私の知る限り、デフォルトではtmux
ログイン シェルが実行されます。 が対話型ログイン シェルとして呼び出されると、、 、bash
が検索されます。そのため、これらのファイルのいずれかを配置する必要があります。~/.bash_profile
~/.bash_login
~/.profile
source ~/.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
または、デフォルトの場所である でシステム全体の構成にします。