У меня есть служба, которая использует уникальный порт, указанный пользователем для удаленных подключений. Я установил несколько экземпляров этого сервиса и написал скрипт bash для автоматизации установки. У моего установщика есть встроенная проверка, чтобы моя собственная глупость не пыталась привязаться к портам, уже настроенным на ранее установленных экземплярах. Ранее я использовал lsof вот так ...
if [[ -z $(lsof -i :${service_port}) ]]; then
Работал отлично, пока я не понял, что иногда я переключаю экземпляры на периоды времени, а lsof проверяет только используемые порты.
Так что теперь я возвращаюсь к очистке файлов конфигурации (круто? не более lsof зависимости) каждого экземпляра, который является маленьким только приблизительно 5 КБ каждый, чтобы быстро пройти через.
Я попробовал это изначально (каждая установка находится в отдельной папке в 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
Но это срабатывает в каждом каталоге, конечно. Есть ли способ сделать эту запись только один раз, не делая сэндвич цикла while или, возможно, другую команду, которая не должна искать хотя бы все файлы?