Hangi koşullarda ilk önce yolda bulunan yürütülebilir dosya kullanılmaz?


15

Yolda bir yürütülebilir ilk oluşumunu kullanarak osx üzerinde zsh (homebrew ile yüklü 5.4.2_1) ile bazı garip bir davranış yaşıyorum.

İşte senaryo:

echo $PATH İadeler:

/usr/local/Cellar/zplug/HEAD-9fdb388/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

demlemek ikisinde de

/usr/local/Cellar/zplug/HEAD-9fdb388/bin     

ve

usr/local/bin/brew

Bu, hangi döndüren bir demleme çalıştırarak onaylanır :

/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew   
/usr/local/bin/brew

Ama hangi demlemek koşmak zaman döner:

/usr/local/bin/brew

ve demlemek çalışıyor mu /usr/local/bin/brewziyade/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew

Demlemek yolun başlarında olduğunda bu nasıl olabilir?

Yardım takdir.


7
rehashve tekrar çalıştırın - eğer daha sonra devam ederse, bunu düzenleyin .
Michael Homer

@MichaelHomer: Evet bu. Burada deneyim.
Joshua

Yanıtlar:


25

which -a cmdcmdiçindeki dizinlerde yürütme iznine sahip olduğunuz tüm normal dosyaları arar $path(takma adlara, işlevlere, yerleşiklere ek olarak ...).

Iken çalışacak which cmdkomutu döndürür zsh( diğer kabukların aksine benzer whichbir yerleşiktir ).zshtcsh

zshDiğer kabukların çoğu gibi hash, $pathher çağrıldığında tüm dizinlerde onları aramak zorunda kalmamak için bir tablodaki yürütülebilir dosyaların yollarını hatırlar .

Bu karma tablo ( $commandsilişkilendirilebilir dizide açık zsh) hashkomutla (standart POSIX kabuk komutu) değiştirilebilir.

Çalıştırmak varsa brew(veya komut which/type/whence brewo eklenmiştir önce karma / önbellek olduğunu astarlanmalıdır olurdu, ya kullanılan komut tamamlama ya da bir şey) /usr/local/Cellar/zplug/HEAD-9fdb388/binönce veya /usr/local/Cellar/zplug/HEAD-9fdb388/bineklendi $path, zshonun yolunu hatırladı ve gibi saklanan olurdu $commands[brew]=/usr/local/bin/brew.

Bu durumda, hash -r(Bourne kabuğunda rehasholduğu gibi ) veya (csh'de olduğu gibi) kullanarak hatırlanan komutları zsh unutun (bu önbelleği geçersiz kılın ), böylece bir dahaki sefere arayabilir ve yeni konumda bulabilir.


Teşekkürler - bu sorunu sıraladı. $ Komutunu [demlemek] echo edebilmeli miyim - hiçbir şey göremiyorum?
Continum

1
@continuum, özür dilerim, kötülerim, bu $commandsdeğil $command. Bkz. Düzenleme.
Stéphane Chazelas

0

/usr/local/bin/brew genellikle sembolik bir bağlantıdır.

Yani /usr/local/bin/brewve /usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew

muhtemelen aynı dosyalardır.

yazın:

ls -al /usr/local/bin/brew

onaylamak.

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.