Estou usando o Bash 4.4.20. Eu normalmente tenho a função main em cada bashscript. Se eu quiser originar este script de outra função dentro de outro script bash, isso entrará em conflito com a definição da função principal em ambos os scripts?
#A.sh
main() {
SomeFunction
}
SomeFunction(){
. B.sh
}
main "$@"
#B.sh
main(){
echo Hi
}
main "$@"
Existe alguma solução sem renomear a função principal?
O outro script irá redefinir
main()
, sim. Embora neste caso em particular, eu não tenha certeza se isso importa, já que omain()
script from A está sendo executado quando o script B redefine a função. Duvido que um shell permitiria a redefinição para alterar o comportamento de uma função já em execução.Ou seja, dados esses scripts:
rodando
a.sh
com qualquer shell posso encontrar printsa1
,b
,a2
. Sea.sh
ligasse demain
novo, teria o novo comportamento, é claro.Mas mesmo que isso não importe aqui, redefinir funções rapidamente dessa forma seria pelo menos muito confuso.
A melhor pergunta é: por que você precisa criar o script B em primeiro lugar? Pareceria mais claro ter B como uma coleção de funções a serem carregadas pelo sourcing, uma espécie de biblioteca; ou tê-lo como um utilitário independente, chamado de programa regular, não fornecido.
No primeiro caso, A chamaria explicitamente as funções definidas em A conforme necessário.
Resposta curta sim
Resposta longa Se você originar um script, é o mesmo que executar um script, mas em seu próprio processo de shell. Assim, variáveis de ambiente, nomes de funções, etc. são compartilhados. Consulte https://superuser.com/a/176788/222230