Saya memiliki beberapa perilaku aneh dengan zsh (5.4.2_1 diinstal dengan homebrew) di osx tidak menggunakan kejadian pertama dari executable di path.
Berikut ini skenarionya:
echo $PATH
pengembalian:
/usr/local/Cellar/zplug/HEAD-9fdb388/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
minuman ada di keduanya
/usr/local/Cellar/zplug/HEAD-9fdb388/bin
dan
usr/local/bin/brew
Ini dikonfirmasikan dengan menjalankan -sebuah yang menghasilkan:
/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
/usr/local/bin/brew
Tetapi ketika saya menjalankan yang mana itu kembali:
/usr/local/bin/brew
dan minuman tidak menjalankan /usr/local/bin/brew
daripada/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
Bagaimana ini bisa terjadi ketika minuman lebih awal di jalan?
Bantuan dihargai.
rehash
dan jalankan lagi - jika itu masih terjadi setelah itu, edit di.Jawaban:
which -a cmd
mencari semua file biasa bernamacmd
yang Anda punya izin mengeksekusi di direktori di$path
(selain alias, fungsi, bawaan ...).Sementara
which cmd
mengembalikan perintah yangzsh
akan dijalankan (which
adalah builtin dizsh
seperti ditcsh
tetapi tidak seperti kebanyakan shell lainnya).zsh
, seperti kebanyakan shell lain mengingat jalur executable dalam sebuahhash
tabel agar tidak harus mencarinya di semua direktori di$path
setiap kali Anda menjalankannya.Tabel hash (diekspos dalam
$commands
array asosiatif dalamzsh
) dapat dimanipulasi denganhash
perintah (perintah shell POSIX standar).Jika Anda telah menjalankan
brew
perintah (atauwhich/type/whence brew
, atau menggunakan penyelesaian perintah atau apa pun yang akan menyiapkan hash / cache) sebelum ditambahkan ke/usr/local/Cellar/zplug/HEAD-9fdb388/bin
atau sebelum/usr/local/Cellar/zplug/HEAD-9fdb388/bin
ditambahkan$path
,zsh
akan mengingat jalurnya dan menyimpannya sebagai$commands[brew]=/usr/local/bin/brew
.Dalam hal ini, Anda dapat menggunakan
hash -r
(seperti dalam shell Bourne) ataurehash
(seperti dalam csh) untukzsh
melupakan perintah yang diingat (membatalkan cache itu ), sehingga dapat mencarinya lain kali dan menemukannya di lokasi baru.sumber
$commands
, tidak$command
. Lihat edit./usr/local/bin/brew
biasanya merupakan tautan simbolis.Jadi
/usr/local/bin/brew
dan/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
mungkin file yang sama.
Tipe:
untuk mengkonfirmasi.
sumber