Czy jest wbudowane bash dla „które”?


16

Testowałem minimalną instalację Fedory. Zwykle używam do sprawdzenia ścieżki dla tłumaczy takich jak python lub node which.

Zauważyłem, że whichdomyślnie nie jest instalowany. Mógłbym dodać pakiet, ale zastanawiam się, czy jest wbudowana powłoka, której można użyć do wykonania tego wspólnego zadania.

Używam bash 4.2.


1
W jakiś sposób przyniosło mi to poszukiwanie odpowiednika systemu Windows; dla przyszłych przeglądających: „gdzie” poda ścieżkę do podanego pliku.
Rubber Duck

1
Zachęcam każdego, kto natknie się na to pytanie, aby również przeczytał niniejsze pytania i odpowiedzi dotyczące U&L. Obejmuje wszystko, co kiedykolwiek chciałeś wiedzieć which. Dlaczego nie użyć „które”? Czego więc użyć?
slm

Odpowiedzi:


26

Możesz użyć typewbudowanego Basha:

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

Aby uzyskać dokumentację, zobacz help [t]ype, która odnosi się do typesekcji na bashstronie man.

( help typedrukuje strony pomocy dla dwóch poleceń wbudowanych, które zaczynają się od ciągu „typ”, z których jedno jest przestarzałe i całkowicie niezwiązane z tym.)


3
Lubie type -asiebie dlaczego w nawiasach [t]ype?
glenn jackman

type -awypisze wszystkie rzeczy, które wskazuje argument, a nie tylko to, co zostanie wykonane podczas pisania.
l0b0

2
Zachęcam każdego, kto natknie się na to pytanie, aby również przeczytał niniejsze pytania i odpowiedzi dotyczące U&L. Obejmuje wszystko, co kiedykolwiek chciałeś wiedzieć which. Dlaczego nie użyć „które”? Czego więc użyć?
slm

Pierwszą rzeczą na liście type -azawsze jest to, co by to wykonało. Robię to samo co Glenn i zawsze type -ateż używam .
slm

1
type -pnie pokazuje ścieżki, jeśli polecenie jest aliasem. type -Pzawsze pokazuje poprawnie ścieżkę polecenia. Myślę. powinniśmy zaktualizować zaakceptowaną odpowiedź jako type -P@ l0b0
dyrektor

10

Możesz użyć typelub command -v. Wyjście typejest czytelne dla człowieka; wyjście command -vmoże być wykonane przez Bash.

Zauważ, że w rzeczywistości są one nieco inne. typei commandsprawdź wartość skrótu polecenia. To znaczy, jeśli wpiszesz cmd, type cmdalbo command -v cmdpowie dokładnie, co będzie działać. Działają również na aliasach, funkcjach Bash i wbudowanych Bash (chociaż type -pzignorują je i zwrócą tylko prawdziwe pliki).

whichpo prostu wyszukuje ŚCIEŻKĘ. Jest inaczej, ponieważ:

  • Jeśli istnieje alias, funkcja lub funkcja wbudowana o tej samej nazwie, zostanie ona wywołana.
  • Jeśli polecenie zostało dodane wcześniej w PATH od czasu ostatniego skrótu, zostanie ono znalezione przez which, ale wykonanie tego polecenia spowoduje użycie wartości skrótu (możesz wymusić aktualizację skrótu w Bash za pomocą hash -r).

Zwykle ludzie naprawdę nie chcą type, whichprzynajmniej do użytku interaktywnego, ponieważ używają go, aby dowiedzieć się „skąd pochodzi to polecenie, gdy je uruchamiam?” Powinieneś używać tylko, whichjeśli naprawdę chcesz wykonać PATH.


command -vjest odpowiednikiem ksh whence.
Henk Langeveld

1
Więc mamy where, whencei oczywiście także who, whyi when? Dlaczego nie ma what?
Hagen von Eitzen

echo 'main(){printf("what\n");}' | sudo cc -x c - -o /usr/local/bin/what
Ivan Vučica
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.