GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser `which` sur une commande alias ?

Comme la plupart des utilisateurs, j'ai un tas d'alias configurés pour donner un ensemble d'indicateurs par défaut pour les programmes fréquemment utilisés. Par exemple,

alias vim='vim -X'
alias grep='grep -E'
alias ls='ls -G'

Le problème est que si je veux utiliser which pour voir où mon vim /grep /ls /etc vient, l'alias gêne :

$ which vim
vim: aliased to vim -X

C'est une sortie utile, mais pas ce que je recherche dans ce cas; Je connais vim est aliasé à vim -X mais je veux savoir où ça vim vient.

À moins de ne pas définir temporairement l'alias juste pour que je puisse utiliser which dessus, y a-t-il un moyen facile d'avoir which "déballer" l'alias et s'exécuter dessus ?

Modifier : Il semble que which est un shell intégré avec différents comportements à travers différents shells. Dans Bash, la suggestion de SiegeX du --skip-alias drapeaux fonctionne ; cependant, je suis sur Zsh. Existe-t-il quelque chose de similaire ?

Réponse acceptée :

which est en fait une mauvaise façon de faire des choses comme ça, car il fait des suppositions sur votre environnement basé sur $SHELL et les fichiers de démarrage (il pense) que le shell utilise ; non seulement il se trompe parfois, mais vous ne pouvez généralement pas lui dire de se comporter différemment. (which sur mon Ubuntu 10.10 ne comprend pas --skip-alias comme mentionné par @SiegeX, par exemple.) type utilise l'environnement shell actuel au lieu de fouiller dans vos fichiers de configuration, et on peut lui dire d'ignorer des parties de cet environnement, de sorte qu'il vous montre ce qui se passera réellement au lieu de ce qui se passerait lors d'une reconstruction de votre shell par défaut.

Dans ce cas, type -P contournera tous les alias ou fonctions :

$ type -P vim
/usr/bin/vim

Vous pouvez également lui demander de décoller tous les calques, un à la fois, et vous montrer ce qu'il trouverait :

$ type -a vim
vim is aliased to `vim -X'
vim is /usr/bin/vim

(Développer cela à partir des commentaires :)

Le problème avec which est qu'il s'agit généralement d'un programme externe au lieu d'un shell intégré, ce qui signifie qu'il ne peut pas voir vos alias ou fonctions et doit essayer de les reconstruire à partir des fichiers de démarrage/configuration du shell. (Si c'est un shell intégré, comme c'est le cas dans zsh mais apparemment pas bash , il est plus susceptible d'utiliser l'environnement du shell et de faire ce qu'il faut.)

type est une commande conforme à POSIX qui doit se comporter comme s'il s'agissait d'une commande intégrée (c'est-à-dire qu'elle doit utiliser l'environnement du shell à partir duquel elle est invoquée, y compris les alias et les fonctions locaux), donc elle est généralement un intégré.

En relation :Commande par lots pour supprimer des fichiers de la liste des fichiers ?

Il ne se trouve généralement pas dans csh /tcsh , bien que dans la plupart des versions modernes de ceux which est un shell intégré et fait ce qu'il faut; parfois l'intégré est what à la place, et parfois il n'y a pas de bon moyen de voir l'environnement du shell actuel à partir de csh /tcsh du tout.


Linux
  1. Comment utiliser la commande Su sous Linux

  2. Comment utiliser la commande basename ?

  3. Comment utiliser la commande d'écran Linux

  4. comment utiliser pylint dans vim

  5. Comment ajouter une commande dans l'éditeur vim ?

Comment utiliser la commande head

Comment utiliser la commande PS

Comment utiliser la commande TOP

Comment utiliser la commande d'arrêt de Linux

Comment utiliser grep sous Linux

Comment utiliser la commande which sous Linux