#!/bin/bash
for i in 1 2 3 4 5
do
echo "Count $i"
done;
Лучше зациклить:
for i in {1..5}; do
echo "Count $i";
done
Таким образом, вам не нужно указывать все эти номера. Итак, что бы вы сделали, если бы вам пришлось перебрать 100 чисел, используя ваш метод?
Похоже, невозможно использовать переменные среды с файлами модулей, когда вы пытаетесь запустить скрипт от имени другого пользователя. Права доступа к файлу модуля были root :root, а скрипт запускался как postgres :postgres.
Я даже пытался использовать файл EnvironmentFile в файле модуля, но в контейнере это тоже не удалось. Возможно, это связано с тем, что я использую замену SystemD из замены gdraheim/docker -systemctl -. Может быть, что-то еще, в любом случае служба не работала.
[Service]
EnvironmentFile=-/etc/sysconfig/dockerenv
В конце концов я добавил строку ExecStartPost в файл postgresql.service.
ExecStartPost=/bin/bash -c /usr/local/bin/psql.sh
Файл dockerenv создавался при загрузке с помощью сценария запуска, использующего следующее...
#Create EnvironmentFile for postgres user when running psql.sh
echo "DEV_ENV=\"${DEV_ENV}\"
PUID=${PUID}
GUID=${GUID}" > /etc/sysconfig/dockerenv
Затем сценарий psql.sh извлекает оттуда значения переменных при запуске.
#!/bin/bash
date
POS_ENV=$(cat /etc/sysconfig/dockerenv | awk -F= '/DEV_ENV/ { print $2 }' | awk 'gsub("\"","")')
while [[ $(systemctl status postgresql.service | awk '/Active/sub("\\(","") { print $3 }' | awk 'sub("\\)","")' ) != "running" ]]
do echo "Waiting on service to come up.";done
for i in ${POS_ENV[*]};do EX=$(psql -lt | cut -d\| -f1 | grep ${i,,})
echo "Creating ${i}"
if [[ ! ${EX} ]];then
psql -c "CREATE DATABASE ${i};"
psql -c "CREATE USER $i WITH PASSWORD '${i}'; GRANT ALL PRIVILEGES ON DATABASE $i TO ${i};"
fi;done