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 de manière aliases.sh
interactive, les choses fonctionnent comme prévu:
[mycomputer]~/ $ source aliases.sh
[mycomputer]~/ $ fooAlias
this will never work!
Cependant, si j'appelle à la place la fonction définie dans mon .bashrc, il ne reconnaît pas l'alias après avoir obtenu sa définition:
[mycomputer]~/ $ setupLotsOfThings
-bash: fooAlias: command not found
Qu'est-ce qui se passe ici? Y a-t-il quelque chose qui me manque dans la portée de la alias
commande lorsqu'elle est utilisée dans une fonction?
Edit: je vais ajouter quelques détails au-delà de l'exemple minimal pour mettre en lumière ce que j'essaie d'accomplir.
Pour 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 de logiciels spécifiques, des chemins 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 shell ou des alias, qui invoquent d'autres fonctions ou alias ou exécutent divers scripts. Pour moi, c'est une boîte noire.
Je voudrais configurer mes propres 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 était simplement de copier les lignes ci-dessus dans un bloc fonction, mais comme le montre l'exemple original, cela ne fonctionne tout simplement pas. Des solutions alternatives sont plus que bienvenues!