Eu uso um script (ao qual não tenho acesso de gravação) que cria vários aliases para configurar um ambiente. Gostaria de criar uma função bash para configurar meu ambiente, mas parece que os aliases não sobrevivem ao corpo da função.
Aqui está um exemplo mínimo:
# aliases.sh
alias fooAlias='echo "this will never work!"'
.
# .bashrc
function setupLotsOfThings() {
source aliases.sh
fooAlias
}
.
Agora, se eu simplesmente fonte aliases.sh
interativa, as coisas funcionam como esperado:
[mycomputer]~/ $ source aliases.sh
[mycomputer]~/ $ fooAlias
this will never work!
No entanto, se eu chamar a função definida no meu .bashrc, ela não reconhecerá o alias depois de obter sua definição:
[mycomputer]~/ $ setupLotsOfThings
-bash: fooAlias: command not found
O que está acontecendo aqui? Há algo que está faltando no escopo do alias
comando quando usado em uma função?
Edit: Vou adicionar alguns detalhes além do exemplo mínimo para esclarecer o que estou tentando realizar.
Para o meu trabalho, desenvolvo e executo muitos softwares em um cluster e / ou grade. Tenho vários projetos que exigem ambientes completamente diferentes, como versões diferentes do gcc, versões específicas de software, PATHs de configuração e dados e várias variáveis de ambiente. Os administradores fornecem os scripts para configurar várias coisas, geralmente definindo funções ou aliases do shell, que invocam outras funções ou aliases ou executam vários scripts. Para mim, é uma caixa preta.
Eu gostaria de configurar meus próprios ambientes com um único comando. Atualmente, faço 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
Esses comandos geralmente precisam ser executados em ordem. Minha idéia era basicamente copiar as linhas acima em um bloco de funções, mas, como mostra o exemplo original, isso simplesmente não funciona. Soluções alternativas são mais que bem-vindas!