Tìm một tập tin trong đường dẫn mà không có tên mà Viking?


12

Tôi (bằng cách nào đó) có thể chạy một kịch bản:

$ assemble.sh file
... [output]

Nhưng whichkhông thể tìm thấy nó:

$ which assemble.sh
which: no assemble.sh in (/s/std/bin:/usr/afsws/bin:/opt/SUNWspro/bin:/usr/ccs/bin:/usr/ucb:/bin:/usr/bin:/usr/stat/bin:/usr/X11R6/bin:.
  1. Sao có thể như thế được?
  2. Làm thế nào tôi có thể tìm thấy tập tin này ở đâu?

Tôi đang sử dụng bash.


assemble.shtrong thư mục hiện tại của bạn?
Keith

3
Có lẽ là một câu hỏi ngớ ngẩn, nhưng nó có phải là bí danh không (nghĩa là lắp ráp.sh hiển thị khi bạn gõ lệnh alias ?
James McLeod

@JamesMcLeod Đoán thật tuyệt! Đó là trường hợp của tôi cho acme.sh ( github.com/Neilpang/acme.sh ). Sau khi cài đặt, bí danh acme.sh đã được tạo và tôi tự hỏi làm thế nào acme.sh được gọi mặc dù không có trong PATH var.
rlib

Câu trả lời:


17

Sử dụng lệnh này: type assemble.sh

Nó hoạt động trong nhiều loại vỏ và chỉ hiển thị kết quả đầu tiên.


9
Hoặc chỉ type assemble.sh, là di động (và chỉ hiển thị trận đấu đầu tiên trong khi đó type -alà cấu trúc ksh / bash để hiển thị tất cả các kết quả khớp).
Gilles 'SO- ngừng trở thành ác quỷ'

6

Hoặc phân chia đường dẫn và sử dụng nó trong tìm kiếm - trận đấu đầu tiên sẽ là giải pháp

find ${PATH//:/ } -maxdepth 1 -name assemble.sh -print -quit

type Tất nhiên là dễ dàng hơn.


2
Điều này khá hữu ích. Tôi không biết tôi có thể chia $ PATH thành các thành phần phụ của nó và tìm kiếm từng bộ phận vớifind
Ehtesh Choudhury

1
Chưa thử nhưng tôi đoán đây có thể phá vỡ với khoảng trống trong các thành phần của PATH
nhed

4

Bạn có thể đang sử dụng bash, nhưng cú pháp của whichđầu ra cho thấy rằng bạn sử dụng bản cũ whichđược viết bằng csh. PATH xuất hiện được trích dẫn bởi dấu ngoặc đơn và các thư mục trong PATH có các mục giống như /opt/SUNWspro/bin/usr/ccs/binchỉ có ý nghĩa trong Solaris. Điều đó phù hợp: Solaris đã sử dụng csh which.

Đây là dự đoán của tôi: bạn đã có một PATH cho bash, và một cái khác cho csh. Đây có thể là một vấn đề hệ thống. Như tôi nhớ, Solaris giữ các tập tin / etc / profile và / etc / cshrc cho cài đặt PATH trên toàn hệ thống. Hai tệp khởi tạo này có thể đặt các biến PATH khác nhau cho các shell khác nhau. Thực hiện "echo $ PATH" trong bash và xem liệu nó có đồng ý với những gì whichlệnh in ra dưới dạng chuỗi PATH không.


4
command -v assemble.sh

Thông tin

-v in một mô tả về LỆNH tương tự như nội dung `type '

Ngoài ra sẽ có ích nếu bạn muốn tìm trong một phiên bản sửa đổi của PATHASSEMBLE=$(PATH=/usr/bin:/usr/local/opt/coreutils/libexec/gnubin command -v assemble.sh)
nhed

0

Bạn có thể sử dụng locate assemble.shđể tìm vị trí của tập tin.


Không, điều này cho thấy vị trí của tất cả các tệp có thể đọc được (thế giới) có tên chứa assemble.sh, không liên quan ở đây.
Gilles 'SO- ngừng trở thành ác quỷ'

Nó không liên quan chút nào. Ngay cả khi anh ta có nhiều tệp được gọi như thế locatecũng sẽ cho anh ta vị trí của tệp anh ta muốn. assemble.shkhông phải là một tên tệp phổ biến như vậy, vì vậy anh ta có thể sẽ tìm thấy tệp dễ dàng (đó là những gì OP yêu cầu).
nico

1
Bạn không phải updatedbtrước khi locatehiển thị kết quả?
glenn jackman

1
Thường updatedbđược chạy hàng ngày như một công việc định kỳ, nhưng vâng, bạn có thể phải buộc nó nếu tệp rất gần đây.
nico
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.