Ketika saya menjalankan program tanpa menentukan path lengkap ke executable, dan Bash harus mencari direktori $PATH
untuk menemukan biner, tampaknya Bash mengingat path dalam semacam cache. Misalnya, saya memasang build Subversion dari sumber ke /usr/local
, lalu mengetik svnsync help
di Bash prompt. Bash menemukan biner /usr/local/bin/svnsync
untuk "svnsync" dan menjalankannya. Lalu ketika saya menghapus instalasi Subversion di /usr/local
dan berlari kembali svnsync help
, Bash menjawab:
bash: /usr/local/bin/svnsync: No such file or directory
Tetapi, ketika saya memulai instance baru Bash, ia menemukan dan mengeksekusi /usr/bin/svnsync
.
Bagaimana cara menghapus cache path ke executable?
bash
executable
cache
Daniel Trebbien
sumber
sumber
Jawaban:
bash
melakukan cache path lengkap ke sebuah perintah. Anda dapat memverifikasi bahwa perintah yang Anda coba jalankan terpotong dengantype
perintah:Untuk menghapus seluruh cache:
Atau hanya satu entri:
Untuk informasi tambahan, konsultasikan
help hash
danman bash
.sumber
csh
, perintahnya adalahrehash
.rehash
Perintah di atas juga berfungsi untukzsh
.hash svnsync
.Untuk menghapus hanya satu entri, Anda memerlukan bendera yang berbeda:
The
-r
Bendera tidak mengambil parameter dan akan selalu menghapus seluruh cache.(Setidaknya dalam bash 3.2.39 tentang Debian Lenny)
sumber
Ada solusi yang tidak disebutkan di sini.
Anda dapat menonaktifkan hashing dengan
set +h
atauset +o hashall
help set
mengatakan:Anda dapat memeriksa bahwa perintah yang ditemukan di tabel hash ada sebelum mencoba untuk mengeksekusinya
shopt -s checkhash
help shopt
mengatakan:Anda dapat mengikat NAME dengan PATH dengan
hash -p PATH NAME
atauBASH_CMDS[NAME]=PATH
:Magic:
PATH="$PATH"
tampilhash -r
Dari
variables.c
:Mencoba:
sumber
Seperti yang dicatat oleh pengguna johntex dalam komentar atas jawaban oleh pengguna Tobu , tindakan praktis paling sederhana di Bash adalah hanya mengulangi program Anda:
Itu saja.
sumber