Apakah ada bash bawaan untuk 'yang'?


16

Saya telah menguji instalasi Fedora minimal. Untuk mengecek path untuk interpreter seperti python atau node, saya biasanya menggunakan which.

Saya perhatikan whichtidak diinstal secara default. Saya bisa menambahkan paket, tapi saya ingin tahu apakah ada builtin shell yang dapat digunakan untuk melakukan tugas umum ini.

Saya menggunakan bash 4.2.


1
Entah bagaimana pencarian untuk Windows yang setara membawa saya ke sini; untuk pemirsa di masa depan: "di mana" akan memberi tahu Anda jalur file yang diberikan.
Bebek Karet

1
Saya mendorong siapa pun yang menemukan Q ini untuk membaca U&L Q&A ini. Ini mencakup semua yang ingin Anda ketahui which. Mengapa tidak menggunakan "yang"? Lalu apa yang harus digunakan?
slm

Jawaban:


26

Anda dapat menggunakan type, yang merupakan Bash bawaan:

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

Untuk dokumentasi, lihat help [t]ype, yang merujuk pada typebagian di bashhalaman manual.

( help typemencetak halaman bantuan untuk dua bawaan yang dimulai dengan string "type", salah satunya usang dan sama sekali tidak terkait dengan ini.)


3
Aku suka type -adiriku sendiri mengapa tanda kurung masuk [t]ype?
glenn jackman

type -aakan mencetak semua hal yang ditunjukkan argumen, dan bukan hanya apa yang akan dieksekusi saat mengetiknya.
l0b0

2
Saya mendorong siapa pun yang menemukan Q ini untuk membaca U&L Q&A ini. Ini mencakup semua yang ingin Anda ketahui which. Mengapa tidak menggunakan "yang"? Lalu apa yang harus digunakan?
slm

Hal pertama dalam daftar type -aselalu apa yang akan dijalankannya. Saya melakukan hal yang sama seperti Glenn dan selalu menggunakan type -ajuga.
slm

1
type -ptidak menunjukkan jalur jika perintah adalah alias. type -Pselalu menunjukkan jalur perintah dengan benar. kupikir. kita harus memperbarui jawaban yang diterima sebagai type -P@ l0b0
dirigean

10

Anda bisa menggunakan typeatau command -v. Output dari typeadalah dapat dibaca manusia; output dari command -vdapat dieksekusi oleh Bash.

Perhatikan bahwa mereka sebenarnya sedikit berbeda. typedan commandmencari nilai hash dari perintah. Artinya, jika Anda mengetik cmd, type cmdatau command -v cmdakan memberi tahu Anda dengan tepat apa yang akan dijalankan. Mereka juga bekerja pada alias, fungsi Bash, dan Bash builtins (meskipun type -pakan mengabaikan ini dan hanya mengembalikan file yang benar).

whichhanya melakukan pencarian di PATH. Ini berbeda karena:

  • Jika ada alias, fungsi, atau builtin dengan nama yang sama, itu akan dipanggil.
  • Jika perintah ditambahkan sebelumnya di PATH sejak hash terakhir, itu akan ditemukan oleh which, tetapi mengeksekusi perintah itu akan menggunakan nilai hash (Anda dapat memaksa memperbarui hash di Bash dengan hash -r).

Biasanya orang benar-benar menginginkan type, bukan which, setidaknya untuk penggunaan interaktif, karena mereka menggunakannya untuk mencari tahu "dari mana datangnya perintah ini ketika saya menjalankannya?" Anda hanya harus menggunakan whichjika Anda benar-benar ingin melakukan pencarian PATH.


command -vadalah setara dengan ksh whence.
Henk Langeveld

1
Jadi kita memiliki where, whence, dan tentu saja juga who, why, dan when? Kenapa tidak ada what?
Hagen von Eitzen

echo 'main(){printf("what\n");}' | sudo cc -x c - -o /usr/local/bin/what
Ivan Vučica
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.