4 votes

Comment utiliser un alias dans une fonction ?

Dans mes dotfiles, j'ai quelques fonctions qui dépendent de l'existence d'alias ou de fonctions pour fonctionner. Pour une raison quelconque, je peux les faire référencer d'autres fonctions que j'ai créées, mais pas les alias pour les commandes. Comment puis-je résoudre ce problème ?

Exemple :

function open-dotfiles-commit(){ 
    xopen https://github.com/fatso83/dotfiles/blob/$1; 
}

Si j'ai un alias xopen ( alias xopen=xdg-open ), le open-dotfiles-commit La commande échouera avec xopen: cannot find command . En revanche, si je remplace la définition de l'alias par une fonction appelée xopen ( function xopen(){ xdg-open; }; ), ça marche !

J'ai même essayé de régler shopt -s expand_aliases dans le même fichier que celui où je définis les alias - sans succès. Le fichier d'alias et de fonctions provient de mon fichier .bashrc .

7voto

Olorin Points 3248

De le manuel bash :

Les alias sont développés lorsqu'une définition de fonction est lue, et non lorsque la fonction est exécutée, car une fonction commande.

Je parierais que vos alias sont définis après la définition de ces fonctions. Essayez de définir les fonctions plus tard.

Pour référence, j'ai testé foo () { ll "$1"; } à l'aide de l'outil ll de l'alias par défaut .bashrc et cela a bien fonctionné.

Exemple d'exécution :

def-before() { do-foo; };    
alias do-foo="echo foo u!"    
def-after() { do-foo; };

def-before 
# prints "do-foo: Could not find command"

def-after
# prints "foo u!"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X