Problema della shell: l'alias non si espande
Domanda
Ho il seguente problema: Ho molti script di test che stanno attualmente in esecuzione usando MKS Toolkit .Siamo riusciti a eseguire quegli script usando mingw shell (msys) ma ci sono altri script che utilizzano alcuni generatori di generatoriche sono toolkit di MKS integrati e non in Bash.
Il problema è che nessuno vuole modificare quegli script, nemmeno automaticamente utilizzando uno script.Ciò significa che dovrei definire e usare quegli alias.Ho provato a definire gli alias nel file "/ etc / profilo" di Msys Shell ma senza alcun successo.Ho anche provato ad usare alias
(in "/ etc / profilo") ma non funziona neanche.
Qualcuno potrebbe condividere un'idea su come questo potrebbe essere fatto.Mente che gli script esistenti dovranno rimanere lo stesso.
Qualsiasi pensiero o idee sono i benvenuti.
Grazie
Soluzione 2
Questa risposta mi ha dato la soluzione.Coinvolge la definizione del BASH_ENV
variabile prima dell'esecuzione
bash script_name.sh
.
bash_env punta a uno script che imposta l'ambiente della shell.Nel mio caso, per esportare i alias
s e anche le funzioni necessarie lo script è simile a questo:
shopt -s expand_aliases
alias my_alias="echo my_alias"
function MyFunction {
echo "MyFunction(DUMB):" $*
}
export -f MyFunction
. Altri suggerimenti
Il /etc/profile
viene acquistato solo per le shell di accesso.Se vuoi gli alias nel tuo script, dovresti inserirli in un file separato e dirigerli negli script (s) che ne hanno bisogno.Ad esempio:
aliass.sh :
alias walrus="echo coo coo cah joo"
.
script.sh :
#!/bin/bash
shopt -s expand_aliases
. aliases.sh
walrus
.
e poi
$ ./script.sh
coo coo cah joo
.
Questo è probabilmente il modo più ragionevole per farlo.Se insistono per non modificare gli script a tutti , allora potresti essere in grado di allontanarsi con eseguirli indirettamente come:
bash --rcfile aliases.sh -i script.sh
.
che racconterà Bash di eseguire un guscio interattivo (e quindi espandere gli alias e sorgente il nostro script di alias prima dell'esecuzione dello script.sh).