Có một bash dựng sẵn cho 'cái nào' không?


16

Tôi đã thử nghiệm cài đặt Fedora tối thiểu. Để kiểm tra đường dẫn cho các trình thông dịch như python hoặc nút, tôi thường sử dụng which.

Tôi nhận thấy whichkhông được cài đặt theo mặc định. Tôi có thể thêm gói, nhưng tôi tự hỏi liệu có một vỏ dựng sẵn có thể được sử dụng để thực hiện tác vụ chung này không.

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


1
Bằng cách nào đó, một tìm kiếm cho Windows tương đương đã đưa tôi đến đây; cho người xem trong tương lai: "ở đâu" sẽ cho bạn biết đường dẫn của tệp đã cho.
Vịt cao su

1
Tôi khuyến khích bất cứ ai đi qua Q này cũng đọc Q & A này. Nó bao gồm mọi thứ bạn từng muốn biết which. Tại sao không sử dụng dịch vụ mà Dùng gì rồi?
slm

Câu trả lời:


26

Bạn có thể sử dụng type, đó là một nội dung Bash:

$ type -P which
which is /usr/bin/which

Đối với tài liệu, xem help [t]ype, trong đó đề cập đến typephần trong bashtrang người đàn ông.

( help typein các trang trợ giúp cho hai nội dung bắt đầu bằng chuỗi "loại", một trong số đó đã lỗi thời và hoàn toàn không liên quan đến điều này.)


3
Tôi thích type -abản thân mình Tại sao dấu ngoặc trong [t]ype?
glenn jackman

type -asẽ in tất cả những thứ mà đối số trỏ tới, và không chỉ những gì sẽ được thực thi khi gõ nó.
l0b0

2
Tôi khuyến khích bất cứ ai đi qua Q này cũng đọc Q & A này. Nó bao gồm mọi thứ bạn từng muốn biết which. Tại sao không sử dụng dịch vụ mà Dùng gì rồi?
slm

Điều đầu tiên trong danh sách type -aluôn là những gì nó sẽ thực thi. Tôi làm giống như Glenn và luôn luôn sử dụng type -a.
slm

1
type -pkhông hiển thị đường dẫn nếu lệnh là bí danh. type -Pluôn luôn hiển thị đường dẫn lệnh đúng. tôi nghĩ. chúng ta nên cập nhật câu trả lời được chấp nhận như type -P@ l0b0
Thủ trưởng Dirigeant

10

Bạn có thể sử dụng typehoặc command -v. Đầu ra của typecon người có thể đọc được; đầu ra của command -vcó thể được thực thi bởi Bash.

Lưu ý rằng chúng thực sự là một chút khác nhau. typecommandtra cứu giá trị băm của lệnh. Đó là để nói, nếu bạn gõ cmd, type cmdhoặc command -v cmdsẽ cho bạn biết chính xác những gì sẽ được chạy. Chúng cũng hoạt động trên các bí danh, các hàm Bash và các nội dung Bash (mặc dù type -psẽ bỏ qua các tệp này và chỉ trả về các tệp thực).

whichchỉ cần tìm kiếm trên PATH. Điều này khác nhau bởi vì:

  • Nếu có một bí danh, hàm hoặc hàm dựng sẵn có cùng tên, nó sẽ được gọi thay thế.
  • Nếu một lệnh đã được thêm vào trước đó trong PATH kể từ lần băm cuối cùng, nó sẽ được tìm thấy bởi which, nhưng thực thi lệnh đó sẽ sử dụng giá trị băm (bạn có thể buộc cập nhật hàm băm trong Bash với hash -r).

Thông thường mọi người thực sự muốn type, không which, ít nhất là để sử dụng tương tác, vì họ sử dụng nó để tìm hiểu "lệnh này đến từ đâu khi tôi chạy nó?" Bạn chỉ nên sử dụng whichnếu bạn thực sự muốn thực hiện tra cứu PATH.


command -vlà tương đương với ksh whence.
Henk Langeveld

1
Vì vậy, chúng tôi có where, whencevà tất nhiên cũng who, whywhen? Tại sao không có what?
Hagen von Eitzen

echo 'main(){printf("what\n");}' | sudo cc -x c - -o /usr/local/bin/what
Ivan Vučica
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.