Bash nhớ đường dẫn sai đến một tệp thực thi đã được di chuyển / xóa


29

Khi tôi làm

which pip3

tôi có

/usr/local/bin/pip3

nhưng khi tôi cố gắng thực thi pip3tôi gặp một lỗi như sau:

bash: /usr/bin/pip3: No such file or directory

Điều này là do gần đây tôi đã xóa tập tin đó. Bây giờ whichlệnh trỏ đến một phiên bản khác pip3được đặt trong /usr/local/binnhưng shell vẫn nhớ đường dẫn sai. Làm thế nào để tôi làm cho nó quên đi con đường đó?

Các whichnhãn hiệu nói

which returns the pathnames of the files (or links) which would be executed in the current environment, had its arguments been given as commands in
       a strictly POSIX-conformant shell.  It does this by searching the PATH for executable files matching the names of the arguments. It does not follow
       symbolic links.

Cả hai /usr/local/bin/usr/binđều nằm trong PATHbiến của tôi , và /usr/local/bin/pip3không phải là một liên kết tượng trưng, ​​nó là một thực thi. Vậy tại sao nó không thực thi?


Nội dung của là /usr/local/bin/pip3gì?
Thomas

Trước đây bạn có chạy pip3trong cái vỏ đó khi nó ở trong /usr/binvà sau đó di chuyển nó không?
Eric Renouf

1
Bạn thấy gì nếu bạn chạy hash -t pip3?
Eric Renouf

1
@Eric Renouf hash -t pip3in/usr/bin/pip3
nhện

2
Trừ khi bạn có một lý do rất tốt, bạn nên luôn luôn sử dụng typeeather hơn which. typeđược tích hợp vào vỏ posix và cho bạn biết shell sẽ làm gì, thay vì whichcố gắng đoán xem shell sẽ làm gì.
icarus

Câu trả lời:


37

Khi bạn chạy một lệnh trong bashđó, nó sẽ nhớ vị trí của lệnh thực thi đó để nó không phải tìm kiếm PATHlại mỗi lần. Vì vậy, nếu bạn chạy tệp thực thi, sau đó thay đổi vị trí, bashvẫn sẽ cố gắng sử dụng vị trí cũ. Bạn sẽ có thể xác nhận điều này hash -t pip3sẽ hiển thị vị trí cũ.

Nếu bạn chạy hash -d pip3nó sẽ báo bash để quên vị trí cũ và sẽ tìm vị trí mới vào lần tiếp theo bạn thử.


4
Hoặc hash -rđể xóa toàn bộ bảng.
mattdm

Vâng, điều đó đã làm việc. Tôi nghĩ rằng tôi sẽ thay đổi tiêu đề của câu hỏi vì nó không có gì để làm which.
nhện

1
@spiderface cho hầu hết các tính năng bash, nó dễ sử dụng hơn helpthay vì con người, vì vậy ở đâyhelp hash
Eric Renouf

3
@spiderface type hashsẽ cho bạn biết rằng đó là một phần mềm dựng sẵn, vì vậy nó không có trang người dùng riêng. Thay vào đó, sử dụng help hashhoặc tra cứu hashtrong trang man của bash.
deltab

1
Hoặc, nếu bạn thực sự muốn sử dụng man... vì hashlà một bashnội trang, bạn sẽ muốn man bashtìm thấy nó. Nhưng những gì trang người đàn ông nói về cơ bản là những gì help hashbash nói.
MAP
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.