新しいtmuxセッションはbashrcファイルをソースしません


17

概要

新しい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"

回答:


19

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

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

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

1
source ~/.bashrc行を追加し、.bash_profileログアウトしてからログインし直して、新しいtmuxセッションを作成しましたが、変更はしませんでした。何か案は?
ジャスティンW.フローリー

1
ファイルに次.tmux.confの行を入れてみてくださいset-option -g default-shell "/bin/bash"。これで問題が解決するはずです(少なくともそうすることを望みます)!
-andreatsh

tmux構成をリロードした後、これで問題が解決しました!回答を修正したり、新しい回答を作成したいですか?私はそれを受け入れられたものとして喜んでマークします。:)
ジャスティンW.フローリー

あなたは親切です、私はすぐに私の答えを修正しました!
-andreatsh

2
macOSユーザーへの注意:bashHomebrew を使用してインストールしたがこれが機能しない場合は、に変更"/bin/bash""/usr/local/bin/bash"ます。

4

これは、Bash initファイルに関連しています。デフォルトで~/.bashrcは、対話型の非ログインシェル使用されます。ログインシェルでは提供されません。Tmuxはデフォルトでログインシェルを使用します。したがって、tmux skipによって起動されたシェル~/.bashrc

default-command シェルコマンド

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

Bashの初期化ファイル、

  1. ログインモード:
    1. /etc/profile
    2. ~/.bash_profile~/.bash_login~/.profile(存在するだけ最初のもの)
  2. インタラクティブな 非ログイン
    1. /etc/bash.bashrc (一部のLinux。MacOS 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ユーザーがプロファイルでこれを設定することをお勧めします。

参照資料


2

以下を追加.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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.