'Hangisi' için bir bash yerleşimi var mı?


16

Minimum bir Fedora yüklemesini test ediyorum. Python veya düğüm gibi tercümanların yolunu kontrol etmek için normalde kullanıyorum which.

whichVarsayılan olarak yüklenmediğini fark ettim . Paketi ekleyebilirdim, ama bu ortak görevi yerine getirmek için kullanılabilecek bir kabuk yerleşik olup olmadığını merak ediyorum.

Bash 4.2 kullanıyorum.


1
Bir şekilde Windows eşdeğeri için bir arama beni buraya getirdi; gelecekteki izleyiciler için: "nerede" size verilen dosyanın yolunu söyler.
Lastik Ördek

1
Bu soruya rastlayan herkesi bu U&L Soru ve Cevaplarını da okumaya teşvik ediyorum. Hakkında bilmek istediğiniz her şeyi kapsar which. Neden “hangisini” kullanmıyorsunuz? O zaman ne kullanılır?
slm

Yanıtlar:


26

typeBir Bash yerleşkesi olan şunları kullanabilirsiniz :

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

Belgeler için bkz help [t]ypeatıfta hangi typebölümünde bashadam sayfası.

( biri "eski" dizesiyle başlayan ve bunlardan biri geçersiz olan ve bununla tamamen alakasız olan iki yerleşikhelp type için yardım sayfalarını yazdırır .)


3
Kendimi seviyorum type -a. neden köşeli parantezler [t]ype?
glenn jackman

type -aargümanın işaret ettiği her şeyi yazdıracak, sadece yazarken ne yapılacağını değil.
l0b0

2
Bu soruya rastlayan herkesi bu U&L Soru ve Cevaplarını da okumaya teşvik ediyorum. Hakkında bilmek istediğiniz her şeyi kapsar which. Neden “hangisini” kullanmıyorsunuz? O zaman ne kullanılır?
slm

Listedeki ilk şey type -aher zaman yürüteceği şeydir. Glenn ile aynı şeyi yapıyorum ve her zaman da kullanıyorum type -a.
slm

1
type -pkomut bir takma adsa yolu göstermez. type -Pher zaman komut yolunu düzgün gösterir. bence. kabul edilen yanıtı type -P@ l0b0 olarak güncellemeliyiz
dirigeant

10

Sen kullanabilir typeya command -v. Çıktısı typeinsan tarafından okunabilir; çıktısı command -vBash tarafından yürütülebilir.

Aslında biraz farklı olduklarını unutmayın. typeve commandkomutun karma değerine bakın. Yani yazarsanız, demek ki cmd, type cmdya command -v cmdçalıştırmak olacaktır tam olarak ne söyleyecektir. Ayrıca takma adlar, Bash işlevleri ve Bash yerleşikleri üzerinde de çalışırlar (ancak type -pbunları yok sayar ve yalnızca gerçek dosyaları döndürür).

whichsadece PATH üzerinde bir arama yapar. Bu farklı çünkü:

  • Aynı ada sahip bir takma ad, işlev veya yerleşik varsa bunun yerine çağrılır.
  • Son komuttan bu yana PATH'ye daha önce bir komut eklenmişse, tarafından bulunur which, ancak bu komutun yürütülmesi karma değerini kullanır (Bash'deki karma değerini güncellemeye zorlayabilirsiniz hash -r).

Genellikle insanlar en azından interaktif kullanım için typedeğil which, "bu komut çalıştırıldığında nereden geliyor?" Yalnızca whichgerçekten PATH araması yapmak istiyorsanız kullanmalısınız .


command -veşdeğeridir ksh whence.
Henk Langeveld

1
Elimizdeki Yani where, whencetabii ki aynı zamanda, ve who, whyve when? Neden hayır what?
Hagen von Eitzen

echo 'main(){printf("what\n");}' | sudo cc -x c - -o /usr/local/bin/what
Ivan Vučica
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.