Saya telah mengompilasi versi emacs terakhir dari kode sumber (v24.2) karena versi yang diinstal pada komputer saya (cukup) lama bagi saya (v21.3). Saya sudah melakukan yang biasa:
$configure --prefix=$HOME
make
make install
Sekarang saya sedang menguji emacs dan menyadari bahwa ia masih meluncurkan versi sebelumnya ... sementara $HOME/bin
jalur saya seharusnya mengesampingkan sistem satu (karena itu ditanggung oleh $ PATH dalam .bashrc
file saya ).
Pikiran pertama saya adalah melihat which
output perintah. Dan mengejutkan, itu memberi jalan ke emacs baru. Saya tidak mengerti di mana perbedaannya di sini. Dalam sesi yang sama di sini adalah keluaran yang berbeda:
$ emacs --version
GNU Emacs 21.3.1
$ `which emacs` --version
GNU Emacs 24.2.1
Saya tidak memiliki alias yang melibatkan emacs. Sama sekali.
$ alias | grep emacs
$
Ada yang tahu apa yang sedang terjadi, tolong?
Jawaban:
Tiga kemungkinan yang muncul di benak saya:
emacs
(yang sudah Anda periksa)emacs
emacs
Biner baru tidak ada dalam hashtable PATH shell Anda.Anda dapat memeriksa apakah Anda memiliki fungsi
emacs
:Dan hapus:
Shell Anda juga memiliki hashtable PATH yang berisi referensi ke setiap biner di PATH Anda. Jika Anda menambahkan biner baru dengan nama yang sama dengan yang ada di tempat lain di PATH Anda, shell perlu diinformasikan dengan memperbarui hashtable:
Penjelasan tambahan:
which
tidak tahu tentang fungsi, karena ini bukan bash bawaan:Perilaku hashtable biner baru ditunjukkan oleh skrip ini.
Meskipun saya tidak menyebutnya,
which cat
akan selalu mengembalikan yang pertamacat
di PATH saya, karena tidak menggunakan hashtable shell.sumber
type
perintah.hash -r
memperbaiki masalah saya.Ya, jangan gunakan yang :
PATH
.Ada builtin untuk itu. Dua, genap:
type
dancommand
. Cara POSIX:Di bash, Anda juga bisa menggunakan
type -p emacs
untuk melihat lintasan dari perintah eksternal.Namun, di sini,
which
sebenarnya benar. Bash menyimpan informasi tentang lokasi perintah dalam memori, sehingga dapat menjalankan perintah lebih cepat di waktu berikutnya. Anda telah menginstalemacs
executable baru pada AndaPATH
, tetapi bash masih memiliki lokasi lama dalam cache-nya. Jalankanhash emacs
untuk mencariemacs
lagi, atauhash -r
untuk mengosongkan cache.sumber
Apakah Anda keluar dan masuk sehingga
.bashrc
file login Anda yang diperbarui dibaca kembali? Jika tidak, lingkungan sesi Anda saat ini belum diperbarui.sumber
`which emacs` --version
akan setuju denganemacs --version
, karenawhich
mewarisi PATH-nya dari shell saat ini.