Como executar vários arquivos de configuração através de um script?

1

Eu tenho um script bash que eu escrevi que pega variáveis de um arquivo de configuração. Eu os passo da linha de comando assim:

./my_script.sh ./config1.conf

À medida que continuei a fazer mais configurações que precisam ser executadas, agora preciso executar muitos comandos para passar por todas as configurações. Eu estou querendo saber se existe uma maneira de ter o script executado através de todas as configurações como rsyslog faz, numerando-os 01-first_config.conf, 10-config_ten.conf, 20-config_twenty.conf, etc. Eu tentei o seguinte mas só executa o primeiro arquivo:

./my_script.sh ./*.conf

Eu poderia também colocar todas as variáveis em um arquivo com seções separadas, mas não tenho certeza de como fazer isso, já que cada seção teria essencialmente uma lista completa de todas as variáveis requeridas pelo script. Não sei como passar cada seção pelo script após a conclusão da seção anterior.

    
por tjohnson 05.09.2017 / 00:53

2 respostas

2

Você precisa decidir se deseja esse tratamento em (como rsyslog ) ou fora do script. Se você quiser

./my_script.sh ./*.conf

para trabalhar, então você tem que adaptar o script para que ele aceite vários parâmetros. Algo como

for config_file; do
    . "$config_file"
done

Ou você codifica ou de alguma forma transmite um diretório com esses arquivos:

for config_file in /path/to/configs/*.conf; do
    . "$config_file"
done
    
por 05.09.2017 / 06:42
1

O que deve acontecer quando você faz ./my_script.sh ./*.conf é que o glob se expande para ./my_script.sh ./a.conf ./b.conf ./etc...conf .

Se o que você quer fazer é lançar ./my_script.sh para cada arquivo do seu glob, o seguinte pode ajustar seu caso:

$ ls -1 ./*.conf | while read CONF; do ./my_script.sh "$CONF"; done

Explicação: ls -1 é usado para expandir o glob, 1 arquivo por linha. while read CONF inicia um loop para cada linha.

Como alternativa, você pode usar ./my_script.sh ./*.conf e, dentro do seu script, usar $* , que conterá o glob expandido, ou $1 , $2 , $3 , ... que correspondem a os argumentos posicionais individuais, separados por espaço.

    
por 05.09.2017 / 02:06