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

答え2

set-option -g default-shell $SHELLから削除する必要があります。 envvar が.tmux.confデフォルトでtmux使用されるため、必要ありません。SHELL

マンページには次のように記載されています。

     default-shell path
             Specify the default shell.  This is used as the login
             shell for new windows when the default-command option is
             set to empty, and must be the full path of the exe-
             cutable.  When started tmux tries to set a default value
             from the first suitable of the SHELL environment vari-
             able, the shell returned by getpwuid(3), or /bin/sh.
             This option should be configured when tmux is used as a
             login shell.

tmux~/.profileログインシェルはデフォルトで開始されます(つまり、インポートまたは~/.zprofile終了~/.zlogoutする~/.bash_logout前のシェル)。

     default-command shell-command
             Set the command used for new windows (if not specified
             when the window is created) to shell-command, which may
             be any sh(1) command.  The default is an empty string,
             which instructs tmux to create a login shell using the
             value of the default-shell option.

バラよりこここの動作の議論 - これは非常に驚くほどの動作とは異なりますscreen

tmuxだから始めたいならいいえ-基本シェルログインシェルを使用して、次のように入力します~/.tmux.conf

set -g default-command $SHELL

ログインシェルを実行するためにデフォルトシェル以外のシェルを使用するには、次の手順を実行します。

set -g default-command "/alternative/sh -l"

関連情報