Um heredoc coloca cada nome de arquivo em sua própria linha sem qualquer outra coisa (apesar de assumir que os nomes de arquivos não contêm nada louco como uma nova linha) e permite uma ordenação específica dos nomes de arquivos:
while read f; do
source ~/myScripts/"$f"
done <<SRC_LIST
assignments.sh
nginx_conf.sh
php_conf.sh
drush_install.sh
so_forth.sh
SRC_LIST
isso também evita o problema de source file [arguments]
, onde os nomes de arquivos subseqüentes seriam tratados como argumentos para assignments.sh
(a menos que você quisesse dizer que os argumentos subseqüentes seriam ??). A lista precisaria ser atualizada manualmente com o que está no sistema de arquivos.
Outra opção seria pular o tédio de listar os arquivos e globá-los; isso pressupõe que todos os arquivos correspondentes no diretório podem e devem ser originados (portanto, não misturar em outros arquivos *.sh
aleatórios que não devem ser originados). No entanto, isso é complicado pelo caso extremo de quando nenhum arquivo é correspondido pelo glob, em cujo caso bash
passará por padrão o nome literal do arquivo ~/myScripts/*.sh
in para ser originado, então isso deve ser contornado (temporariamente, se necessário) e nada originário se não houver correspondências:
REVERT=$(shopt -p nullglob)
shopt -s nullglob
for f in ~/myScripts/*.sh; do
source "$f"
done
$REVERT
com esse método, os nomes de arquivos precisariam ser nomeados de forma que o glob os correspondesse em uma ordem correta se houvesse uma ordem na qual os arquivos precisem ser originados. (No ZSH, não seria necessário o shopt
chamadas em vez disso, for f in ~/myScripts/*.sh(N); do
seria suficiente para realizar uma globulação nula. Outros shells irão variar na forma como eles lidam com globs e o que fazer quando nada corresponder.)