Nhiều cài đặt và hiểu $ PATH


17

Tôi đã cài đặt phiên bản Git cũ hơn tại:

/usr/bin/

Gần đây tôi đã tải xuống một phiên bản mới hơn để:

/usr/local/bin

Khi tôi gõ:

which git

Tôi có được vị trí của phiên bản cũ. Tôi tin rằng đây chỉ là vì / usr / bin / xuất hiện trước / usr / local / bin trong biến $ PATH của tôi và vì vậy phiên bản cũ hơn của git được 'tìm thấy' trước tiên.

Để kiểm tra điều này, tôi đã đổi tên phiên bản cũ hơn của git thành "git_old". Bây giờ khi tôi gõ:

which git

Tôi nhận được vị trí của phiên bản mới hơn, như mong đợi. Nhưng khi tôi gõ:

git --version

Tôi nhận được lỗi sau đây:

-bash: /usr/bin/git: No such file or directory

Tôi chỉ tự hỏi tại sao máy tính của tôi lại quay trở lại tìm vị trí cũ cho Git?

Câu trả lời:


30

Bash lưu trữ toàn bộ đường dẫn đến các tệp thực thi để nó không phải xem qua $PATHmọi lúc.

Bạn có thể thấy những gì trong bộ đệm bằng cách sử dụng hashlệnh:

deltik@node51 [~]$ hash
hits    command
   1    /usr/bin/git

Bộ nhớ cache này có thể được xóa bằng hash -r:

deltik@node51 [~]$ hash -r
deltik@node51 [~]$ hash
hash: hash table empty

Tài nguyên bổ sung


2
Tôi không bao giờ biết điều này, tuyệt vời.
djsmiley2k - CoW

1
Hầu hết các shell khác đều làm điều tương tự, nhưng chúng không sử dụng hash -rđể tải lại bộ đệm. Ca sĩ, chẳng hạn như SSH, sử dụng rehashlàm lệnh thay thế.
Moshe Katz

PATH = $ PATH sẽ xóa bộ nhớ cache. băm -r là không cần thiết.
jrw32982 hỗ trợ Monica
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.