Usei a seguinte maneira para executar uma coleção de arquivos de script Bash, na sessão atual do Bash:
source ~/myScripts/{assignments.sh,nginx_conf.sh,php_conf.sh,drush_install.sh}
Parece-me desconfortável para manter. Alguma coleção vertical é melhor. Pseudo-código:
assignments.sh
nginx_conf.sh
php_conf.sh
drush_install.sh
Como você faria isso verticalmente?
A propósito, não tenho certeza de que um documento de origem como este seja o melhor caminho.
Atualizar
Agora entendo que minha source
operação de uma linha estava fadada ao fracasso porque, a partir do Bash 4.3.48(1), o interpretador Bash avalia source
de forma que só poderia funcionar com um arquivo e qualquer outro arquivo além dele será avaliado como um argumento para o primeiro arquivo (um conjunto de colchetes {}
não ajudaria nisso).
Tenho a impressão de que é o mesmo que bash
com source
.
Um heredoc coloca cada nome de arquivo em sua própria linha sem mais nada (embora assuma que os nomes de arquivo não contêm nada maluco como uma nova linha) e permite uma ordem específica dos nomes de arquivo:
isso também evita o problema de
source file [arguments]
onde os nomes de arquivos subseqüentes seriam tratados como argumentosassignments.sh
(a menos que você queira dizer que os subseqüentes são argumentos??). A lista precisaria ser manualmente atualizada com o que está no sistema de arquivos.Outra opção seria pular o tédio de listar os arquivos e agrupá-los; isso pressupõe que todos os arquivos correspondentes no diretório podem e devem ser originados (portanto, não há mistura em outros
*.sh
arquivos aleatórios que não devem ser originados). No entanto, isso é complicado pelo caso extremo de quando nenhum arquivo é correspondido pelo glob, caso em quebash
, por padrão, passará o nome do arquivo literal de~/myScripts/*.sh
in para ser originado, de modo que deve ser contornado (temporariamente, se necessário) e nada originado se não há correspondências:com este método, os nomes dos arquivos precisam ser nomeados de forma que o glob os corresponda em uma ordem correta se houver uma ordem em que os arquivos precisem ser originados. (No ZSH, não precisaria das
shopt
chamadas, poisfor f in ~/myScripts/*.sh(N); do
seria suficiente executar um glob nulo. Outros shells variam em como lidam com globs e o que fazer quando nada corresponde.)