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 which
domyś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.
which
. Dlaczego nie użyć „które”? Czego więc użyć?Odpowiedzi:
Możesz użyć
type
wbudowanego Basha:Aby uzyskać dokumentację, zobacz
help [t]ype
, która odnosi się dotype
sekcji nabash
stronie man.(
help type
drukuje 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.)źródło
type -a
siebie dlaczego w nawiasach[t]ype
?type -a
wypisze wszystkie rzeczy, które wskazuje argument, a nie tylko to, co zostanie wykonane podczas pisania.which
. Dlaczego nie użyć „które”? Czego więc użyć?type -a
zawsze jest to, co by to wykonało. Robię to samo co Glenn i zawszetype -a
też używam .type -p
nie pokazuje ścieżki, jeśli polecenie jest aliasem.type -P
zawsze pokazuje poprawnie ścieżkę polecenia. Myślę. powinniśmy zaktualizować zaakceptowaną odpowiedź jakotype -P
@ l0b0Możesz użyć
type
lubcommand -v
. Wyjścietype
jest czytelne dla człowieka; wyjściecommand -v
może być wykonane przez Bash.Zauważ, że w rzeczywistości są one nieco inne.
type
icommand
sprawdź wartość skrótu polecenia. To znaczy, jeśli wpiszeszcmd
,type cmd
albocommand -v cmd
powie dokładnie, co będzie działać. Działają również na aliasach, funkcjach Bash i wbudowanych Bash (chociażtype -p
zignorują je i zwrócą tylko prawdziwe pliki).which
po prostu wyszukuje ŚCIEŻKĘ. Jest inaczej, ponieważ: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
,which
przynajmniej do użytku interaktywnego, ponieważ używają go, aby dowiedzieć się „skąd pochodzi to polecenie, gdy je uruchamiam?” Powinieneś używać tylko,which
jeśli naprawdę chcesz wykonać PATH.źródło
command -v
jest odpowiednikiemksh
whence
.where
,whence
i oczywiście takżewho
,why
iwhen
? Dlaczego nie mawhat
?echo 'main(){printf("what\n");}' | sudo cc -x c - -o /usr/local/bin/what