problema de shell:alias não expande
Pergunta
Eu tenho o seguinte problema:Tenho muitos scripts de teste em execução atualmente usando Kit de ferramentas MKS.Conseguimos executar esses scripts usando o shell mingw (msys) mas existem outros scripts que fazem uso de alguns alias
es que são integrados ao MKS Toolkit e não ao bash.
O problema é que ninguém quer alterar esses scripts, nem mesmo automaticamente usando um script.Isso significa que devo definir e usar esses aliases.Tentei definir os aliases no arquivo "/etc/profile" do shell msys, mas sem sucesso.Eu também tentei usar shopt -s expand_aliases
(em "/etc/profile") mas isso também não funciona.
Alguém poderia compartilhar uma idéia de como isso poderia ser feito.Lembre-se de que os scripts existentes deverão permanecer os mesmos.
Quaisquer pensamentos ou ideias são bem-vindos.
Obrigado
Solução 2
Esta resposta me deu a solução.Envolve definir a variável BASH_ENV
antes de executar
bash script_name.sh
BASH_ENV apontará para um script que define o ambiente do shell.No meu caso, para exportar o alias
es e também as funções necessárias, o script fica assim:
shopt -s expand_aliases
alias my_alias="echo my_alias"
function MyFunction {
echo "MyFunction(DUMB):" $*
}
export -f MyFunction
Outras dicas
O /etc/profile
é fornecido apenas para shells de login.Se quiser os aliases em seu script, você deve colocá-los em um arquivo separado e colocá-los no(s) script(s) que precisa(m) deles.Por exemplo:
aliases.sh:
alias walrus="echo coo coo cah joo"
script.sh:
#!/bin/bash
shopt -s expand_aliases
. aliases.sh
walrus
e então
$ ./script.sh
coo coo cah joo
Essa é provavelmente a maneira mais razoável de fazer isso.Se você insiste em não alterar os scripts de forma alguma, então você poderá conseguir executá-los indiretamente, como:
bash --rcfile aliases.sh -i script.sh
Isso dirá ao bash para executar um shell interativo (e, assim, expandir os aliases e fornecer nosso script de aliases antes de executar o script.sh).