tmuxはPATH変数を「ソート」しますか?


14

再現可能な問題があります:

  1. Bash .profileでPATHを設定します
  2. tmuxtmux attachまたは任意のバリアントによってtmuxを開始します
  3. $ PATHをエコーし​​、同じコンポーネントで異なる順序で表示します

これを止める方法は?何がそれを説明していますか?

回答:


29

Macを使用していて、/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bintmuxの実行時になぜPATHの先頭に追加され続けるのか疑問に思っている場合は、/etc/profileファイルから実行されるpath_helperというユーティリティが原因です。

tmux(またはbash)をソースにしないように簡単に説得することはできません/etc/profile(何らかの理由でtmuxは常にログインシェルとして実行されるため、/ etc / profileが読み取られます)が、path_helper don PATHにねじ込まないでください。

トリックは、path_helperを実行する前にPATHが空であることを確認することです。私の~/.bash_profileファイルにはこれがあります:

if [ -f /etc/profile ]; then
    PATH=""
    source /etc/profile
fi

path_helperを実行する前にPATHをクリアすると、デフォルトのPATHが(以前に)選択したPATHの前に追加されなくなり、残りの個人bashセットアップスクリプト(コマンドをさらに下に.bash_profile、または.bashrcからソースを取得した場合.bash_profile)をセットアップできるようになりますそれに応じてPATH。

理にかなっていることを願っています...


1
これは私のために完全にやった!私はそれをif [ -n "$TMUX" ]自分自身の条項の後ろに隠していますが、私は疑問に思っていました-は[ -f /etc/profile ]本当に重要ですか?それ/etc/profileが常に通常のファイルであると想定するのは安全ではありませんか?
ライアンルー

1
あなたが快適に置き換えることができます@RyanLue -f-e、私はそれがあったと思いますがチェックしない限り、私は個人的に私がログインしたときに実行されますスクリプトからファイルを試してみて、ソースではないでしょう。私は多くの異なるマシン(およびオペレーティングシステム)でbashスクリプトを再利用する傾向があるので、それらが防弾であることを確認したいです。他のいくつかのUNIXバリアントが別のUNIXバリアントと呼ぶかもしれないと想像できます。
グラハムアシュトン

ありがとうございました!これは私を夢中にさせ、その小さな断片~/.bash_profileを私の幸せなtmuxの世界に正気を取り戻しました。
hoosierEE

システムのデフォルトを台無しにしたくない場合は、tmux set -g default-command "${SHELL}".tmux.conf強制的に非ログインシェルを使用します。あなたは通常、オープンtmuxはすでにログインした後ので、私は、それらとにかくポイントが表示されていない。
seeker_of_bacon

5

番号; $PATH多くのシステムはユーザー設定の順序に依存しているため、並べ替えはあまりにもクレイジーです。

ただし、tmux シェルを「ログイン」モードで起動する~/.profileため、再びソースが取得さます。これはPATH=/my/dir:/another/dir:$PATH、そのファイルに何かがあれば、それが再び行われ、$ PATHがを含むことを意味します/my/dir:/another/dir:/my/dir:/another/dir:(etc.)。これを回避するには、別の変数を使用して以下を確認できます。

if [ "$_SKIP_PROFILE" ]; then
    return 0
else
    export _SKIP_PROFILE=y
fi

export PATH="/my/dir:/another/dir:$PATH"

0

@Graham Ashtonあなたのアイデアをありがとう

私の提案は、あなたが置くことです

if [ -f /etc/profile ]; then
    PATH=""
    source /etc/profile
fi

最上部の.zshrcファイルで。

あなたのことを確認してください

export NVM_DIR="$HOME/.nvm"
. "/usr/local/opt/nvm/nvm.sh"

以下です。

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