Du manuel bash
Les règles concernant la définition et l'utilisation des alias sont quelque peu confuses. Bash lit toujours au moins une ligne d'entrée complète avant d'exécuter l'une des commandes de cette ligne. Les alias sont développés lors de la lecture d'une commande et non lors de son exécution. Par conséquent, une définition d'alias apparaissant sur la même ligne qu'une autre commande ne prend effet que lorsque la ligne d'entrée suivante est lue. Les commandes suivant la définition d'alias sur cette ligne ne sont pas affectées par le nouvel alias. Ce comportement est également un problème lorsque des fonctions sont exécutées. Les alias sont développés lors de la lecture d'une définition de fonction, pas lors de l'exécution de la fonction , car une définition de fonction est elle-même une commande composée. En conséquence, les alias définis dans une fonction ne sont disponibles qu'après l'exécution de cette fonction . Pour être sûr, placez toujours les définitions d'alias sur une ligne distincte et n'utilisez pas d'alias dans les commandes composées.
Les deux phrases «Les alias sont étendus lorsqu'une définition de fonction est lue, pas lorsque la fonction est exécutée» et «les alias définis dans une fonction ne sont disponibles qu'après l'exécution de cette fonction» semblent opposées.
Pouvez-vous expliquer ce qu'ils signifient respectivement?
.bashrc
fichiers tout en haut.Réponses:
Les alias sont développés lors de la lecture d'une définition de fonction, pas lors de l'exécution de la fonction…
Même si a
myfunc
été défini pour appelermyalias
, et j'ai redéfinimyalias
,myfunc
exécute toujours la définition d'origine demyalias
. Parce que l'alias a été développé lorsque la fonction a été définie. En fait, le shell ne se souvient plus de cesmyfunc
appelsmyalias
; il sait seulement que lesmyfunc
appelscat
:… Les alias définis dans une fonction ne sont disponibles qu'après l'exécution de cette fonction.
L'
myalias
alias n'est pas disponible tant que lamyfunc
fonction n'a pas été exécutée. (Je pense que ce serait plutôt étrange si la définition de la fonction qui définit l'alias était suffisante pour que l'alias soit défini.)la source
J'ai besoin de la réponse indiquée par la première phrase lorsque j'essaye l'extrait ci-dessous dans mon
.bashrc
.après
unalias -a; source ~/.bashrc
, j'essaye d'exécuterlf
etlsf
,il semble clair que les alias sont étendus à la définition de la fonction, pas à l'exécution de la fonction, car :
lf
, l'erreur-bash: ll: command not found
etlsf
,/usr/bin/ls
est utilisé, pas la forme d'alias, pas de surbrillance de couleur et pas de caractères de contrôle après le fichier exécutable.la source