Utilizo un script (al que no tengo acceso de escritura) que crea un grupo de alias para configurar un entorno. Me gustaría crear una función bash para configurar mi entorno, pero parece que los alias no sobreviven al cuerpo de la función.
Aquí hay un ejemplo mínimo:
# aliases.sh
alias fooAlias='echo "this will never work!"'
.
# .bashrc
function setupLotsOfThings() {
source aliases.sh
fooAlias
}
.
Ahora, si simplemente origen aliases.sh
interactivamente, las cosas funcionan como se esperaba:
[mycomputer]~/ $ source aliases.sh
[mycomputer]~/ $ fooAlias
this will never work!
Sin embargo, si en su lugar llamo a la función definida en mi .bashrc, no reconoce el alias después de obtener su definición:
[mycomputer]~/ $ setupLotsOfThings
-bash: fooAlias: command not found
¿Que esta pasando aqui? ¿Hay algo que me falta sobre el alcance del alias
comando cuando se usa en una función?
Editar: agregaré algunos detalles más allá del ejemplo mínimo para arrojar algo de luz sobre lo que estoy tratando de lograr.
Para mi trabajo, desarrollo y ejecuto una gran cantidad de software en un clúster y / o grilla. Tengo varios proyectos que requieren entornos completamente diferentes, como diferentes versiones de gcc, lanzamientos de software específicos, RUTA de configuración y datos, y varias variables de entorno. Los administradores proporcionan los scripts para configurar varias cosas, generalmente definiendo funciones o alias de shell, que invocan otras funciones o alias o ejecutan varios scripts. Para mí, es una caja negra.
Me gustaría configurar mis propios entornos con un solo comando. Actualmente, hago algo como:
[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
Estos comandos generalmente tienen que ejecutarse en orden. Básicamente, mi idea era copiar las líneas anteriores en un bloque de funciones, pero como muestra el ejemplo original, eso simplemente no funciona. ¡Las soluciones alternativas son más que bienvenidas!