Se você quer dizer que quer apenas ter as variáveis visíveis quando o script principal executa os outros scripts, então você apenas export
deles:
$ cat main.sh #!/bin/sh read foo export foo ./foo.sh $ cat foo.sh #!/bin/sh echo "foo is $foo" $ ./main.sh blah foo is blah $
Os outros scripts são executados como subprocessos do script principal, e export
ed variáveis são passadas para eles através do ambiente. Nada disso limita as variáveis a scripts em um diretório específico, as variáveis exportadas são visíveis para todos os programas iniciados pelo script principal. Se você quer rodar algum programa sem passar as variáveis para eles, você terá que desimportá-los com export -n
primeiro. Você pode também não exportar no início dos outros scripts, para evitar que eles passem as variáveis.
Observe também que não há necessidade de limpar as variáveis ou de não as exportar no final do script principal (ou dos outros). As variáveis existem apenas na memória dos processos do shell em execução e, quando o processo termina, as variáveis desaparecem.
(Passar variáveis para processos independentes, por outro lado, exigiria salvá-los em um arquivo ou algo assim.)
Naturalmente, outra maneira de obter quase o mesmo tipo de modularização seria dividir o programa em funções, armazená-las em arquivos separados e source
desses arquivos do script principal. Dessa forma, todas as variáveis do programa seriam visíveis para todas as funções. (Que pode ou não ser preferível).