La dernière ligne de mon .bash_profile
est:
alias cp=/usr/local/bin/gcp
Cependant, cela est écrasé par l'entrée dans mon $PATH
:
$which cp
/bin/cp
11:54:32/OCspark $type cp
cp is aliased to `/usr/local/bin/gcp'
J'avais pensé que les alias remplaçaient le PATH
..?
bash
alias
bash-alias
javadba
la source
la source
PATH
envar.Réponses:
La
which
commande ne renvoie que les exécutables: elle ne sait rien des alias, car il s'agit d'un programme externe, et il n'y a pas de mécanisme pour transmettre des informations d'alias à un processus enfant.Si vous entrez la commande,
type -a cp
vous verrez toutes les interprétations possibles, par ordre de préférence. Cela inclut tout alias, car iltype
s'agit d'unebash
commande interne.Il est important de réaliser qu'un alias ne sera pas interprété par un sous-processus, tel qu'un script ou un éditeur interactif qui a une option pour exécuter des commandes système.
Si vous créez
cp
une fonction, votre version s'exécutera dans des scripts, mais pas à partir d'autres programmes:Si vous voulez que vous
cp
travailliez partout, ajoutez$HOME/bin
en tête de votrePATH
liste et$HOME/bin/cp
pointez-la vers elle:Cela crée un lien symbolique, bien que vous puissiez en faire un lien dur légèrement plus efficace (omis
-s
), mais cela nécessite normalement des autorisations root (sudo ln ...
). La création d'une fonction et son ajout à laPATH
variable se feront dans l'un desbash
scripts de démarrage, avec des autorisations utilisateur.la source
which
qui s'exécute/usr/bin/which
avec une entrée redirigée à partir de la sortie dealias
et une option qui lui dit de lire cette entrée et de l'utiliser pour afficher un alias s'il correspond à la commander. Voir unix.stackexchange.com/questions/10525/…which
àtype
.which -a
Fonctionne ensuite comme le programme externe, avec l'ajout des définitions d'alias et de fonctions. En général, je ne le fais pasalias which=type
, car j'aime utiliser$(which ProgName)
quand je veux forcer l'utilisation d'un programme externe, en contournant tout alias ou définitions de fonctions.ln
suggestion non symbolique ne fonctionnera que si votre répertoire personnel se trouve sur le même système de fichiers que/usr/local/bin
. Il se comportera également bizarrement si vous mettez à jourgcp
, car votre lien dur fera probablement toujours référence à l'ancienne version.gcp
, cela dépendra si la mise à jour se fait par ouverture et écriture ou par suppression et recréation. Notez qu'il importe peu qu'un chemin source absolu ou relatif soit utilisé pour créer un lien dur, tandis qu'un lien symbolique a généralement besoin d'un chemin absolu. Les liens sont largement utilisés dans le système d'exploitation, et ils sont principalement symboliques.Les alias sont internes au shell. D'autres programmes n'en sauront rien.
which
n'est pas une fonction intégrée de Bash (c'est une fonction intégrée dans certains autres shells, par exemple zsh). Puisqu'ilwhich
n'a aucune information privilégiée dans les alias de Bash,which
recherche simplementPATH
le terme donné.type
, d'autre part, est un Bash intégré, il peut donc rendre compte des alias.la source