J'utilise un script (auquel je n'ai pas accès en écriture) qui crée un tas d'alias pour configurer un environnement. Je voudrais créer une fonction bash pour configurer mon environnement, mais il semble que les alias ne survivent pas au corps de la fonction.
Voici un exemple minimal :
# aliases.sh
alias fooAlias='echo "this will never work!"'
.
# .bashrc
function setupLotsOfThings() {
source aliases.sh
fooAlias
}
.
Maintenant, si je source simplement aliases.sh
interactivement, les choses fonctionnent comme prévu :
[mycomputer]~/ $ source aliases.sh
[mycomputer]~/ $ fooAlias
this will never work!
Cependant, si j'appelle plutôt la fonction définie dans mon .bashrc, il ne reconnaît pas l'alias après avoir sourcé sa définition :
[mycomputer]~/ $ setupLotsOfThings
-bash: fooAlias: command not found
Qu'est-ce qui se passe ici ? Est-ce qu'il y a quelque chose qui m'échappe concernant l'étendue de la alias
lorsqu'elle est utilisée dans une fonction ?
Editar: Je vais ajouter quelques détails au-delà de l'exemple minimal pour mettre en lumière ce que j'essaie d'accomplir.
Dans le cadre de mon travail, je développe et exécute de nombreux logiciels sur un cluster et/ou une grille. J'ai plusieurs projets qui nécessitent des environnements complètement différents, tels que différentes versions de gcc, des versions logicielles spécifiques, des PATH de configuration et de données, et diverses variables d'environnement. Les administrateurs fournissent les scripts pour configurer diverses choses, généralement en définissant des fonctions ou des alias scripts, qui invoquent d'autres fonctions ou alias ou exécutent divers scripts. Pour moi, c'est une boîte noire.
J'aimerais configurer mes différents environnements avec une seule commande. Actuellement, je fais quelque chose comme :
[mycomputer]~/ $ source /some/environment/setup/script.sh
[mycomputer]~/ $ aliasToSetupSomeSoftwareVersion #this was defined in the above
[mycomputer]~/ $ anotherAliasForOtherSoftware
[mycomputer]~/ $ source /maybe/theres/another/script.sh
[mycomputer]~/ $ runSomeOtherSetup # this was defined in the new script
Ces commandes doivent généralement être exécutées dans l'ordre. Mon idée de base était de simplement copier les lignes ci-dessus dans un bloc de fonctions, mais comme le montre l'exemple original, cela ne fonctionne tout simplement pas. Les solutions de rechange sont les bienvenues !