Existe-t-il un bash intégré pour «lequel»?


16

J'ai testé une installation minimale de Fedora. Pour vérifier le chemin des interprètes comme python ou node, j'utilise normalement which.

Je remarque qu'il whichn'est pas installé par défaut. Je pourrais ajouter le package, mais je me demande s'il existe un shell intégré qui peut être utilisé pour effectuer cette tâche courante.

J'utilise bash 4.2.


1
D'une certaine manière, une recherche de l'équivalent de Windows m'a amené ici; pour les futurs téléspectateurs: "où" vous indiquera le chemin du fichier donné.
Rubber Duck

1
J'encourage tous ceux qui rencontrent ce Q à lire également ce Q&A U&L. Il couvre tout ce que vous avez toujours voulu savoir which. Pourquoi ne pas utiliser «lequel»? Que faut-il utiliser alors?
slm

Réponses:


26

Vous pouvez utiliser type, qui est un Bash intégré:

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

Pour la documentation, voir help [t]ype, qui fait référence à la typesection de la bashpage de manuel.

( help typeimprime les pages d'aide de deux prédéfinitions commençant par la chaîne "type", dont l'une est obsolète et sans aucun rapport avec cela.)


3
Je type -am'aime bien. pourquoi les crochets [t]ype?
glenn jackman

type -aaffichera toutes les choses vers lesquelles pointe l'argument, et pas seulement ce qui serait exécuté lors de sa saisie.
l0b0

2
J'encourage tous ceux qui rencontrent ce Q à lire également ce Q&A U&L. Il couvre tout ce que vous avez toujours voulu savoir which. Pourquoi ne pas utiliser «lequel»? Que faut-il utiliser alors?
slm

La première chose dans la liste type -aest toujours ce qu'elle exécuterait. Je fais la même chose que Glenn et j'utilise toujours type -aaussi.
slm

1
type -pn'affiche pas le chemin si la commande est un alias. type -Paffiche toujours le chemin de commande correctement. je pense. nous devrions mettre à jour la réponse acceptée comme type -P@ l0b0
dirigeant

10

Vous pouvez utiliser typeou command -v. La sortie de typeest lisible par l'homme; la sortie de command -vpeut être exécutée par Bash.

Notez qu'ils sont en fait un peu différents. typeet commandrecherchez la valeur hachée de la commande. C'est-à-dire, si vous tapez cmd, type cmdou command -v cmdvous dira exactement ce qui sera exécuté. Ils fonctionnent également sur les alias, les fonctions Bash et les modules intégrés Bash (bien type -pqu'ils les ignorent et ne renvoient que les vrais fichiers).

whichfait juste une recherche sur le CHEMIN. C'est différent parce que:

  • S'il existe un alias, une fonction ou une fonction intégrée portant le même nom, il sera appelé à la place.
  • Si une commande a été ajoutée plus tôt dans le PATH depuis son dernier hachage, elle sera trouvée par which, mais l'exécution de cette commande utilisera la valeur hachée (vous pouvez forcer la mise à jour du hachage dans Bash avec hash -r).

Habituellement, les gens veulent vraiment type, pas which, au moins pour une utilisation interactive, car ils l'utilisent pour savoir "d'où vient cette commande lorsque je l'exécute?" Vous ne devez l'utiliser que whichsi vous voulez vraiment faire une recherche PATH.


command -vest l'équivalent de ksh whence.
Henk Langeveld

1
Nous avons donc where, whenceet bien sûr aussi who, whyet when? Pourquoi n'y en a-t-il pas what?
Hagen von Eitzen

echo 'main(){printf("what\n");}' | sudo cc -x c - -o /usr/local/bin/what
Ivan Vučica
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.