.bashrc / .profileが新しいtmuxセッション(またはウィンドウ)にロードされない—なぜですか?


94

tmuxが起動するか、新しいウィンドウを開くと、my .profileまたはが読み込まれません.bashrc. ~/.bashrc毎回タイプすることになります。これを自動的に行う方法はありますか?

回答:


146

はい、の最後.bash_profileに次の行を追加します:

. ~/.bashrc

これにより、通常はプロファイルのみを処理するような状況でrcファイルが自動的に読み込まれます。

bash特定のファイルをいつ実行するかに関するルールは複雑で、起動するシェルのタイプ(ログイン/非ログイン、インタラクティブかどうかなど)、コマンドライン引数、環境変数によって異なります。

あなたはそれらをman bash出力で見ることができます、ただ探してくださいINVOCATION-おそらくそれを消化してデコードするのに少し時間が必要です:-)


2
このソリューションの問題は、一部のシステムでは.bashrcが.bash_profileを呼び出すことです。
Honza

1
自分で訂正させてください。システムには.bashrcを呼び出す.bash_profileがありませんが、自分で行っていないことを確認する必要があります。
Honza

1
@Honza、それはほとんど常に逆であるので、それは最も珍しいセットアップでしょう。誰かが確かにそのようにそれを行うように手配することができますが、私たちは彼らの正気に疑問を投げかける必要があります:-)
paxdiablo

2
確かに、私はそれをそのように行うように手配した(そしてそれを忘れた)ことがわかりました。私の正気を問いかけても大歓迎です;)
Honza

3
私は質問だと思った....bashrc/.profile is not loaded on new tmux session (or window) — why?
dylnmc

16

次の行を〜/ .tmux.confファイルに追加することで、bashを実行すると明示的に機能しました。

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

1
これは私のために働いた!ただし、「exec」部分は必要ありません。私は自分に次の行を追加しました~/.tmux.conf set -g default-command "/bin/bash"。どうも。
ジョーカー

しかし、なぜこれが起こっているのでしょうか?Ubuntu 16.04から18.04.2にアップグレードした後、これに突然気づきました。これが私が考えることができる唯一の違いです。また、一部の構成が壊れ、新しい構文に準拠する必要があることに気付きました(tmuxも更新されたようですが、以前確認に使用したtmuxのバージョンを覚えていません)。
ジョーカー

6

以前の回答は解決策を提供しましたが、理由を説明しませんでした。ここにあります。

これは、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、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ユーザーがプロファイルでこれをセットアップすることをお勧めします。

参考文献



1

私のために働いた解決策は次のとおりです:

  • .bash_profileファイルがない場合は作成します~
  • 終わりに、.bash_profilePUT source ~/.bashrcまたはsource ~/.profile
  • tmuxを再起動します。

これで問題は修正されるはずです。


0

私は同じ問題を抱えていましたが、今のところ解決策はうまくいきませんでした。最終的に私のために働いた解決策はここにあります

要するに、tmuxウィンドウ/セッションは、~/.profile起動時に他のファイルの中から探すログインシェルを使用します。

私が欲しかったのは、新しいtmuxウィンドウごとにzshを起動exec zshすることでした~/.profile

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