Mặc dù điều này đã được một số người khác trả lời tốt, tôi muốn thêm một vài suy nghĩ:
1) PATH chỉ được tham khảo nếu lệnh được thực thi không có phần tử đường dẫn trong đó. somecommand sẽ được tra cứu trong $ PATH, ./somecommand
hoặc /usr/bin/somecommand
, hoặc ../../bin/somecommand
chỉ sử dụng các quy tắc thư mục, không phải PATH
Nếu có nhiều tệp thực thi trong PATH có cùng tên thì tệp nào được ưu tiên?
Nó dừng lại ở cái đầu tiên nó tìm thấy, đọc $ PATH từ trái sang phải.
Là thư mục hiện tại có trong tìm kiếm khi tập tin được thực thi?
Nếu thư mục hiện tại nằm trong PATH thì nó được tìm kiếm. Hãy nhớ rằng một thư mục trống trong PATH bao gồm thư mục hiện tại. ví dụ: PATH =: / usr / bin (trống rỗng)
Giả sử có một tệp có tên execable.sh trong một thư mục hiện tại. Nó sẽ hoạt động nếu nó được thực thi $ exec và. không phải là một phần của PATH?
Nó sẽ không bao giờ tìm thấy nó bằng cách tìm kiếm PATH. Nếu thư mục hiện tại không có trong PATH, nó sẽ không tìm thấy nó bằng cách tra cứu PATH.
Điều đó nói (và xin lỗi để thêm nhầm lẫn) nếu có một bí danh hoặc chức năng chạy lệnh, nó sẽ được chạy. Hoặc nếu shell của bạn có bộ đệm vị trí và tệp thực thi nằm trong bộ đệm, nó có thể tìm thấy nó. Vì vậy, nó sẽ không bao giờ tìm thấy nó trong PATH, nhưng nó có thể được điều hành bằng các phương tiện khác.
which <executable>
lệnh sẽ hữu ích trong chủ đề này.