Sourcing de um arquivo várias vezes em um script bash

1

Eu tenho um grande script de configuração (bash) que é muito bem modularizado em funções separadas para completar um monte de tarefas para instalar / configurar um novo lançamento de um pacote de software.

Percebemos que seria muito útil ter algumas dessas funções disponíveis para serem chamadas sem executar o script inteiro. Eu poderia ter feito o script aceitar um argumento para chamar a função específica, mas como o script já cresceu para mais de 1.200 linhas, para facilitar a leitura, pretendo dividi-lo em sub-scripts que serão executados a partir do pai. O objetivo é que os sub-scripts possam ser executados independentemente para reconfigurar algo específico.

O script pai (chamado de assistente) em sua forma original tinha várias variáveis globais que eram manipuladas pelas funções conforme o script era executado. Para que o script seja dividido, estou criando um arquivo persistente para todos os valores de configuração, junto com uma função que permite que as funções atualizem os pares key = value no arquivo persistente (ou os acrescente, se não o fizerem já existe).

Ok, a pergunta atual! Como o assistente é o script pai e os filhos (sub-scripts) podem editar ou adicionar valores de configuração quando são chamados, é aceitável para o assistente? para re-source o arquivo persistir várias vezes através do fluxo do assistente (o que é necessário desde sourcing não flui "para cima")? Ou seja, sempre que uma função do assistente inicia, que configura um determinado software, ele cria o arquivo primeiro, caso um sub-script faça uma alteração em um valor de configuração.

Como as funções estão fornecendo o arquivo, estou assumindo que, quando a função estiver completa, ela sairá do escopo (ou qualquer que seja a terminologia equivalente no bash). Então isso não deve causar problemas, mas eu adoraria ter certeza. Obrigado por qualquer conselho!

** EDIT: Para esclarecimento, o principal motivo para usar o arquivo persistente (e por que o chamo assim) é que eu quero que ele fique disponível para quando um dos sub-scripts for chamado individualmente. Sem o assistente configurando as variáveis globais, elas perderiam informações vitais sobre seus ambientes quando executadas de maneira independente.

    
por MerrillFraz 20.07.2016 / 17:48

1 resposta

2

Escolha uma (ou mais) das variáveis que DEVEM existir para que as funções funcionem e usem algo como:

[ -z "$REQUIREDVARIABLE" ] && . persistent-file

ou

[ -z "$REQ1" ] || [ -z "$REQ2" ] || [ -z "$REQ3" ] && . persistent-file

Dessa forma, os scripts de origem só lerão o arquivo persistente se as variáveis não estiverem já no ambiente (que serão e serão mantidas atualizadas quando forem originadas do script "wizard".

PS: IMO você deve usar as ferramentas de empacotamento do unix / linux para implementar o código de produção, em vez de reinventar a roda. Se estiver distribuindo para terceiros, empacote todos os unixes / linux-distros que você pretende suportar. Use VMs executando sistemas operacionais e versões específicos para criar pacotes. E se o seu código é open source então várias distros etc. manterão seus próprios pacotes ou ports se isso parecer útil ou interessante para um dos desenvolvedores.

    
por 21.07.2016 / 08:37