Я работаю над сценарием, который создает пользователя Пост-ГРЭС с вводом переменной от исходного файла. Как пользователь 'базируются', я запускаю следующий скрипт:
su - postgres <<'EOF'
. /var.src
psql
CREATE ROLE john;
ALTER USER john WITH PASSWORD '$JOHNPASSWORD';
ALTER ROLE john WITH LOGIN;
CREATE DATABASE john;
ALTER DATABASE john OWNER TO john;
\q
EOF
Я создаю пользователя john и базу данных john, однако пароль john находится в var.src. Везде я смотрю, я получаю команды, подобные этому:
sudo -u postgres psql -c "ALTER USER john WITH PASSWORD '$JOHNPASSWORD';"
Замена пароля с $JOHNPASSWORD требует Escape, который я принимаю. Я попытался выйти из одинарной кавычки с обратной косой чертой, двойными кавычками, и т.д. Ничто. Я не смог найти, как я могу выйти из одинарной кавычки так, чтобы она могла считать переменную из var.src.
Возможно, это имеет некоторое отношение, как я приближаюсь к этому полностью?
Я нашел что-то, что помогло. Я предоставил пароль, изменяют команду после того, как сценарий убежал из EOF. Таким образом, вот то, что работало на меня:
su - postgres <<'EOF'
. /var.src
psql
CREATE ROLE john;
ALTER ROLE john WITH LOGIN;
CREATE DATABASE john;
ALTER DATABASE john OWNER TO john;
\q
EOF
. /var.src
sudo -u postgres psql -c "ALTER USER john WITH PASSWORD '$JOHNPASSWORD';"
Это вызвано тем, что я назвал переменный файл снова после EOF. Я уверен, что это имеет отношение к моему предыдущему предположению о выходе из кавычки. Но это работает также.