新しいtmuxセッションは.zshrcソースのみを提供し、.profileで定義された$ PATHを取得しません。

新しいtmuxセッションは.zshrcソースのみを提供し、.profileで定義された$ PATHを取得しません。

このトピックに関するいくつかの質問を読んだ後も、まだ迷子になった気がします。環境変数は特別に、またはで設定せず$PATHに包含で設定する必要があるという提案を読んだので、そうしました。.profile.bashrc.zshrc

私のデフォルトのシェルはzshです。set-option -g default-shell $SHELLtmux.conf

ただし、tmuxセッションを開始するたびに変更は許可されず、ソースのみが$PATH許可されます.zshrc。現在の回避策はsource ~/.profile最後に追加することですが.zshrc、これは間違っているようです。

この投稿tmux / screenは通常、ログインシェルではなくサブシェルとして実行されるため、必ずしもsourceである必要はないことを示します.profile。しかし、別の記事では、logoutシェルで実行できる場合はログインシェルであると主張しますが、私はそうすることができました。多くの投稿ではtmux検索する必要があると主張しています。.bash_profile 追加する .profileしかし、無視されます.bashrc。これは明らかに私のzshで起こるものではありません。

最終的にzshでtmuxを使用し、環境変数を正しくインポートするためのベストプラクティスは何ですか?

ベストアンサー1

説明するアクションは予想されるアクションです。環境変数は.profileログイン時に定義され、読み込まれます。新しい tmux セッションを開始するとログインできません。 Tmuxはデフォルトでログインシェルを起動しますが、設定からそれをオフにしたので、tmuxウィンドウは外部世界のみを継承します。

これを入力すると、source .profileシェル.zshrcが実行されているすべての環境は無視されます。つまり、他のPATH

source .profileから削除してください.zshrc。すべてのシェルでログインするとデフォルト環境が設定されます。

ログインシェルがzshの場合、.zprofileログイン時に.profile。 shで動作するGUIログインが必要で、テキストモードログインに同じファイルを使用し、zshをログインシェルに設定した場合は、次の行を次の行として使用してください。.profile.bash_profile.profile.profile~/.zprofile

emulate sh -c 'source ~/.profile'

tmuxがログインシェルを実行するように設定されている場合、すべてのtmuxウィンドウは周囲の環境を継承せずに上書きされます。つまり、tmuxの外部で新しい変数を定義すると、その変数はまだtmuxセッションに残りますが、すでに定義されている変数の値を変更すると、変更はtmux内で失われます。全体的に、tmuxのデフォルト動作はあまり意味がありません。これを避けることがset-option -g default-command $SHELLこのラインの要点です~/.tmux.conf

tmuxを「新しいログイン」方法として使用する場合は、各ウィンドウを新しい環境で実行する方が良いかもしれません。その場合は、次の方法を使用して環境を整理する必要があります。

set-option -g default-command env -i USER="$USER" LOGNAME="$LOGNAME" $SHELL

.zprofileログインシェルがzshの場合は代わりに表示されます.profile

おすすめ記事