Uso uno script (al quale non ho accesso in scrittura) che crea un gruppo di alias per impostare un ambiente. Vorrei creare una funzione bash per configurare il mio ambiente, ma sembra che gli alias non sopravvivano al corpo della funzione.
Ecco un esempio minimo:
# aliases.sh
alias fooAlias='echo "this will never work!"'
.
# .bashrc
function setupLotsOfThings() {
source aliases.sh
fooAlias
}
.
Ora, se semplicemente fonte aliases.shinterattivamente, le cose funzionano come previsto:
[mycomputer]~/ $ source aliases.sh
[mycomputer]~/ $ fooAlias
this will never work!
Tuttavia, se invece chiamo la funzione definita nel mio .bashrc, non riconosce l'alias dopo aver acquisito la sua definizione:
[mycomputer]~/ $ setupLotsOfThings
-bash: fooAlias: command not found
Cosa sta succedendo qui? C'è qualcosa che mi manca nell'ambito del aliascomando quando utilizzato in una funzione?
Modifica: aggiungerò alcuni dettagli oltre l'esempio minimo per far luce su ciò che sto cercando di realizzare.
Per il mio lavoro sviluppo e eseguo molti software su un cluster e / o griglia. Ho diversi progetti che richiedono ambienti completamente diversi, come diverse versioni di gcc, versioni software specifiche, percorsi di configurazione e dati e varie variabili di ambiente. Gli amministratori forniscono gli script per impostare varie cose, di solito definendo funzioni o alias di shell, che invocano altre funzioni o alias o eseguono vari script. Per me è una scatola nera.
Vorrei configurare i miei vari ambienti con un solo comando. Attualmente, faccio qualcosa del tipo:
[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
Questi comandi generalmente devono essere eseguiti in ordine. La mia idea era fondamentalmente di copiare le righe sopra in un blocco funzione, ma come mostra l'esempio originale, semplicemente non funziona. Soluzioni alternative sono più che benvenute!