Je ne peux pas obtenir expand_aliases pour prendre effet dans Bash. J'ai essayé beaucoup de choses différentes, et rien ne fonctionne.
Voici le cas de test simple: p> et la sortie: p> (Oui, j'utilise ShopT au lieu de l'option -o -o pour baster, juste pour le prouver que cela est fait.) P> Des idées? P> P> P>
3 Réponses :
Les alias ne sont pas disponibles sur la même ligne ni dans la même fonction où ils sont définis.
à partir de la page Man Bash: P>
The rules concerning the definition and use of aliases are somewhat confusing. Bash always reads at least one complete line of input before executing any of the commands on that line. Aliases are expanded when a command is read, not when it is executed. Therefore, an alias definition appearing on the same line as another command does not take effect until the next line of input is read. The commands following the alias definition on that line are not affected by the new alias. This behavior is also an issue when functions are executed. Aliases are expanded when a function definition is read, not when the function is executed, because a function definition is itself a comâ pound command. As a consequence, aliases defined in a function are not available until after that function is executed. To be safe, always put alias definitions on a separate line, and do not use alias in comâ pound commands. For almost every purpose, aliases are superseded by shell functions.
C'est un grave lmmanpagetfy
Ils devraient ajouter cela aussi à bash info: "Et aussi en conséquence, des alias utilisés dans des fonctions doivent être définis avant les définitions de fonctions à l'alias fonctionnent réellement."
Je suis arrivé en retard pendant 10 ans.
Vous pouvez utiliser le eval code> pour effectuer l'alias
CDTMP code> Développer à nouveau.
alias cdtmp='cd /tmp'
/tmp
Utilisation de eval code> afin que vous puissiez utiliser
alias code> dans un script est juste ... horrible. Maintenant, vous avez deux problèmes. La solution appropriée consiste à utiliser des alias dans des scripts.
Essayez / bin / bash -o expand_aliases -c 'xx' code> p>
Avez-vous essayé
shopt -p expand_aliases code> pour voir s'il est réellement activé ou non?
Oui, et il est revenu oui. Dennis l'a eu; Lorsque j'ai sauvegardé ce qui précède dans un script shell et le dirigé, cela fonctionnait correctement.