このトピックに関するいくつかの質問を読んだ後も、まだ迷子になった気がします。環境変数は特別に、またはで設定せず$PATH
に包含で設定する必要があるという提案を読んだので、そうしました。.profile
.bashrc
.zshrc
私のデフォルトのシェルはzsh
です。set-option -g default-shell $SHELL
tmux.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"