Tmux PATH değişkenini “sıralar” mı?


14

Tekrarlanabilir bir sorunum var:

  1. PATH'imi Bash .profile içinde kurdum
  2. tarafından tmux başlatmak tmux, tmux attachya da herhangi bir varyantı
  3. echo $ PATH ve aynı bileşenlerle ama farklı sırada görün

Bunu nasıl durdurabilirim? Ne açıklıyor?

Yanıtlar:


29

Bir Mac kullanıyorsanız ve /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bintmux'u çalıştırdığınızda neden PATH'a başlanmaya devam ettiğini merak ediyorsanız , bunun nedeni dosyadan çalıştırılan path_helper adlı bir yardımcı programdır /etc/profile.

Tmux'u (veya daha doğrusu bash) kaynağa yönlendirmemeye kolayca ikna edemezsiniz /etc/profile(bir nedenle tmux her zaman bir giriş kabuğu olarak çalışır, bu da / etc / profile okunacak anlamına gelir), ancak path_helper don'un etkilerinden emin olabilirsiniz. PATH ile vidalamayın.

İşin püf noktası, path_helper çalışmadan önce PATH'ın boş olduğundan emin olmaktır. Benim ~/.bash_profiledosyamda bu var:

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

Path_helper yürütülmeden önce PATH'ın temizlenmesi, varsayılan PATH'yi (önceden) seçtiğiniz PATH'ınıza eklemesini önleyecek ve kişisel bash kurulum komut dosyalarınızın geri kalanının (komutların daha aşağıya .bash_profileveya .bashrckaynaklandıysa .bash_profile) Buna göre PATH.

Umarım mantıklıdır ...


1
Bu tamamen benim için yaptı! if [ -n "$TMUX" ]Kendimi bir cümlenin arkasına gizledim, ama merak ediyordum - [ -f /etc/profile ]gerçekten ne kadar önemli ? Bunun /etc/profileher zaman normal bir dosya olduğunu varsaymak güvenli değil mi?
Ryan Lue

1
Rahatlıkla yerini alabilir @RyanLue -file -eama giriş yaptığınızda Orada olduğunu kontrol etmezseniz ben şahsen koþulur bir komut dosyasından bir dosya deneyin ve kaynak olmaz. Bash komut dosyamı birçok farklı makinede (ve işletim sisteminde) yeniden kullanma eğilimindeyim, bu yüzden kurşun geçirmez olduklarından emin olmak istiyorum. Diğer bazı unix varyantlarının buna başka bir şey diyebileceğini hayal edebiliyorum.
Graham Ashton

TEŞEKKÜR EDERİM! Bu beni çılgına çeviriyordu ve küçük parçacığı ~/.bash_profileakıl sağlığımın tepesine geri koydum, mutlu tmux dünyama.
hoosierEE

Eğer sistem varsayılan uğraşmak istemiyorsanız, set -g default-command "${SHELL}"içinde .tmux.confkuvvetler olmayan giriş kabukları kullanmak tmux. Zaten
girişte görmüyorum

5

Hayır; $PATHbirçok sistem kullanıcı tarafından ayarlanan sıraya bağlı olduğundan, sıralama yapmak çok çılgınca bir şey olacaktır.

Ancak, tmux yok neden "login" modunda kabuk başlatmak ~/.profilekaynaklı olması tekrar . Bu PATH=/my/dir:/another/dir:$PATH, o dosyadaki gibi bir şeye sahipseniz , bunun tekrar yapılacağı ve $ PATH içerdiği anlamına gelir /my/dir:/another/dir:/my/dir:/another/dir:(etc.). Bundan kaçınmak için kontrol etmek için başka bir değişken kullanabilirsiniz:

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

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

0

@Graham Ashton Fikriniz için teşekkürler

Benim önerim,

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

üstündeki .zshrc dosyanızda.

Emin olun sizin

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

altında.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.