Làm thế nào để kiểm tra lệnh nào được thực hiện?


9

Tôi có một kịch bản shell gọi foo.shtrong /usr/local/sbin. Ngoài ra tôi sử dụng một kịch bản khác có cùng tên. Nó được lưu trữ trong /home/user/scripts.

Cả hai con đường đều thuộc về PATH. Làm thế nào tôi có thể tìm ra, một trong những đoạn script đó được thực thi khi gõ foo.shvào dòng lệnh? Tôi có thể ảnh hưởng đến nó?

Câu trả lời:


10

Vài ngày trước tôi hài lòng với câu trả lời của mình. Tôi cũng biết rằng whichlệnh không được sử dụng để kiểm tra xem một lệnh có tồn tại hay không. Bây giờ tôi không hài lòng với câu trả lời của mình và tôi đề cập đến câu trả lời tuyệt vời này .


Với một whichlệnh đơn giản :

which foo.sh

Hoặc một typelệnh:

type foo.sh

Và bạn có thể tác động đến điều này theo thứ tự các đường dẫn trong $PATHhoặc thông qua một đường dẫn tuyệt đối khi tập lệnh bắt đầu, EG

/home/user/scripts/foo.sh

Thí dụ

Nếu PATH được định nghĩa như dưới đây

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Và bạn bắt đầu một tập lệnh hoặc một cái gì đó trong /usr/local/binvà trong /usr/bin, tập lệnh /usr/local/bincó mức độ ưu tiên cao hơn.


1
Nói bashzshcũng có tích typehợp; thay vào đó zsh which, khác với bash, là một tích hợp (và không /usr/bin/which)
kos


@muru cảm ơn. Một chút tôi đã biết về nó rồi, nhưng không chi tiết như vậy. Tôi đã thêm quan điểm của mình vào câu trả lời của mình. Cảm ơn một lần nữa.
AB
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.