Esiste un bash incorporato per "quale"?


16

Ho testato un'installazione minima di Fedora. Per controllare il percorso di interpreti come Python o Nodo, normalmente utilizzo which.

Ho notato che whichnon è installato di default. Potrei aggiungere il pacchetto, ma mi chiedo se esiste una shell integrata che può essere utilizzata per eseguire questo compito comune.

Sto usando bash 4.2.


1
In qualche modo una ricerca per l'equivalente di Windows mi ha portato qui; per i futuri spettatori: "dove" ti dirà il percorso del file specificato.
Rubber Duck,

1
Incoraggio tutti coloro che si imbattono in queste domande a leggere anche queste domande e risposte. Copre tutto ciò che avresti sempre voluto sapere which. Perché non usare "quale"? Cosa usare allora?
slm,

Risposte:


26

Puoi usare type, che è incorporato in Bash:

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

Per la documentazione, vedere help [t]ype, che fa riferimento alla typesezione nella bashpagina man.

( help typestampa le pagine di aiuto per due builtin che iniziano con la stringa "type", uno dei quali è obsoleto e completamente estraneo a questo.)


3
Mi piace type -ame stesso. perché tra parentesi [t]ype?
Glenn Jackman,

type -astamperà tutte le cose a cui punta l'argomento e non solo ciò che verrebbe eseguito durante la digitazione.
l0b0,

2
Incoraggio tutti coloro che si imbattono in queste domande a leggere anche queste domande e risposte. Copre tutto ciò che avresti sempre voluto sapere which. Perché non usare "quale"? Cosa usare allora?
slm,

La prima cosa nella lista di type -aè sempre ciò che dovrebbe eseguire. Faccio lo stesso di Glenn e lo uso sempre type -a.
slm,

1
type -pnon mostra il percorso se il comando è un alias. type -Pmostra sempre correttamente il percorso del comando. penso. dovremmo aggiornare risposta accettata come type -P@ l0b0
dirigeant

10

Puoi usare typeo command -v. L'output di typeè leggibile dall'uomo; l'output di command -vpuò essere eseguito da Bash.

Si noti che in realtà sono leggermente diversi. typee commandcerca il valore con hash del comando. Vale a dire, se si digita cmd, type cmdo command -v cmdvi dirà esattamente ciò che verrà eseguito. Funzionano anche su alias, funzioni di Bash e built-in di Bash (anche se type -pli ignoreranno e restituiranno solo file veri).

whichfa solo una ricerca sul PERCORSO. Questo è diverso perché:

  • Se è presente un alias, una funzione o un builtin con lo stesso nome, verrà invece chiamato.
  • Se un comando è stato aggiunto in precedenza nel PERCORSO dall'ultimo hash, verrà trovato da which, ma eseguendo quel comando verrà utilizzato il valore di hash (è possibile forzare l'aggiornamento dell'hash in Bash con hash -r).

Di solito le persone vogliono davvero type, non whichalmeno per un uso interattivo, poiché lo usano per scoprire "da dove proviene questo comando quando lo eseguo?" Dovresti usarlo solo whichse vuoi davvero fare una ricerca PATH.


command -vè l'equivalente di ksh whence.
Henk Langeveld,

1
Così abbiamo where, whencee, naturalmente, anche who, whye when? Perché non c'è what?
Hagen von Eitzen,

echo 'main(){printf("what\n");}' | sudo cc -x c - -o /usr/local/bin/what
Ivan Vučica,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.