このトピックに関する複数の質問を読んだ後、私はまだ迷っています。特に$PATH
または.profile
ではなく.bashrc
に.zshrc
を含む環境変数を設定する必要があるという提案を読んだので、これを行いました。
デフォルトのシェルはzsh
で、set-option -g default-Shell $Shell
にtmux.conf
を設定しました。
ただし、tmuxセッションを起動すると、$PATH
への変更が反映されず、.zshrc
のみがソースに含まれるようになりました。私の現在の回避策は、source ~/.profile
の最後に.zshrc
を追加することですが、これは正しいことだとは思いません。
この投稿 は、通常、tmux/screenがログインシェルではなくサブシェルとして実行されるため、必ずしも.profile
をソースにする必要はないことを示しています。しかし、別の投稿では、シェルでlogout
を実行できる場合、それはログインシェルであり、私が実際に実行できたと主張しています。多くの投稿では、tmux
は.bash_profile
plus.profile
を探す必要があると主張しましたが、.bashrc
、これは明らかに私のzsh同等の場合に起こったことではありません。
結局、tmshをzshで使用して、環境変数を適切に取得するためのベストプラクティスは何ですか?
あなたが説明する動作は期待されるものです。環境変数は、ログイン時に読み取られる_.profile
_で定義されています。新しいtmuxセッションを開始してもログインしません。TMuxはデフォルトでログインシェルを開始しますが、設定でこれをオフにしています。したがって、tmuxウィンドウは外部環境を継承します。
_source .profile
_を_.zshrc
_に入れると、シェルが実行されている環境がすべて上書きされます。つまり、デフォルト環境とは異なる環境でシェルを実行することはできません。別のPATH
を試してみてください。
_source .profile
_から_.zshrc
_を削除するだけです。すべてのシェルで、デフォルトの環境がログイン時に設定されます。
ログインシェルがzshの場合、ログイン時に_.zprofile
_ではなく_.profile
_を読み取ることに注意してください。これは、_.profile
_がない場合に_.bash_profile
_を読み取るbashとは異なります。 Zshは、構文がshと異なるため、動作が異なります。したがって、_.profile
_を直接読み取ることはできません。 GUIログイン用にshで機能する_.profile
_を使用し、テキストモードログインにも同じファイルを使用する場合、zshをログインシェルとして設定し、次の行を_~/.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
_
また、ログインシェルがzshの場合、_.zprofile
_ではなく_.profile
_を読み取ります。
set-option -g default-Shell $Shell
から.tmux.conf
を削除する必要があります。 tmux
はデフォルトでShell
envvarを使用するため、必要ありません。
これはマンページが言うことです:
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.
この動作についての議論は here を参照してください-これは非常に驚くべきことであり、screen
の動作とは異なります。
したがって、tmux
でデフォルトのシェルを使用してnonログインシェルを開始する場合は、~/.tmux.conf
に次のように入力します。
set -g default-command $Shell
デフォルトのシェルとは別のシェルでログインシェルを実行する場合:
set -g default-command "/alternative/sh -l"