2010-08-06 10 views
2

Dans linux, si je mets une commande dans un script qui contient un alias, je vois qu'il n'est pas développé. Comment puis-je résoudre ce problème? J'utilise bash.alias dans un script

+0

pouvez-vous montrer un exemple? Quelle commande? Comment l'alias-tu? – Cfreak

+0

Vous devriez probablement utiliser des fonctions à la place des alias. Cependant, la réponse de GreenMatt [http://stackoverflow.com/questions/3424725/alias-in-a-script/3424805#3424805] est correcte. –

Répondre

4

Selon le l'TLDP page about aliases, vous devez utiliser la ligne shopt -s expand_aliases dans votre code pour développer des alias. L'exemple ci-dessous a produit le résultat attendu, mais sans la ligne shopt juste imprimé « my_ls: command not found »:

#!/bin/bash 

shopt -s expand_aliases 
alias my_ls='ls -lrt' 
echo "Trying my_ls" 
my_ls 
exit 
+0

intéressant, la page man implique même le besoin de shopt, mais pour bash 3.2.39 elle est activée par défaut. – mvds

1

Si vous voulez que vos alias shell soient disponibles dans un script, vous devez inclure manuellement. Si elles sont définies dans ~/.bashrc, mettre une ligne

. ~/.bashrc 

après la ligne #!/bin/sh dans votre script. Cela va exécuter le contenu de .bashrc dans le contexte de votre script.

0

Activation du mode posix (par exemple en appelant bash comme sh ou avec la commande (set -o posix) 2>/dev/null && set -o posix devrait faire l'affaire.

Même alors, il faut savoir que les alias sont développés car ils sont analysés, et l'ordre entre l'analyse et de l'exécution est mal définie. Par exemple

alias foo=echo; foo bar 

ou

{ 
    alias foo=echo 
    foo bar 
} 

va essayer de courir foo car l'alias n'est pas encore défini au moment de l'analyse. En outre, certains shells analysent l'entrée entière d'un eval ou . (source) avant d'en exécuter un.

La seule manière portable et fiable d'utiliser des alias dans les scripts est de les définir, puis eval ou . le code qui les utilise.