Eu tenho um serviço que utiliza uma porta especificada pelo usuário exclusiva para conexões remotas. Eu instalo várias instâncias deste serviço e escrevi um script bash para automatizar as instalações. Meu instalador possui uma verificação interna para impedir que minha própria estupidez tente ligar às portas já configuradas nas instâncias instaladas anteriormente. Anteriormente, eu estava usando lsof assim ...
if [[ -z $(lsof -i :${service_port}) ]]; then
Funcionou muito bem até que percebi que às vezes alternava instâncias por períodos de tempo e lsof verifica apenas as portas atualmente em uso.
Então, agora estou voltando a raspar os arquivos de configuração (legal? Sem mais lsof de dependência) de cada instância, que são pequenas, apenas cerca de 5kb cada uma, rápidas para percorrer.
Eu tentei isso inicialmente (cada instalação está em sua própria pasta em installs_dir) ...
while read -e -p "Port: " -i "" service_port; do
for each_install in "${installs_dir}/"*
do
if grep -q Port=${service_port} "$each_install"/main.cfg; then
printf "Port ${service_port} in use, try another port\n"
break
else
# Write Config
fi
done
done
Mas é acionado em cada diretório, é claro. Existe uma maneira de fazer essa gravação apenas uma vez sem fazer um sanduíche de loop while ou possivelmente outro comando que não precise pesquisar em todos os arquivos?
fonte