Я пишу сценарий, который автоматически установит WordPress для меня, чтобы облегчить мне жизнь, поскольку мне приходится постоянно развертывать установки WordPress.
Однако я пытаюсь сделать так, чтобы мне никогда не приходилось с ним взаимодействовать, и это отнимает у меня сон.
Чтобы сгенерировать пароли для баз данных и прочего, я использую apg, а затем использую sed для замены строки правильным паролем. Это выглядит примерно так:
DOMAIN="$2"
DB_NAME_USER="$(echo $DOMAIN | sed -e 's/\.//g')"
DB_PASSWORD="$(apg -a 1 -n 1 -m 64 -d -c cl_seed -E \_\"\'\`\/\\\=)"
sed -i "s/database_name_here/$DB_NAME_USER/g" /srv/"$DOMAIN"/wp-config.php
sed -i "s/username_here/$DB_NAME_USER/g" /srv/"$DOMAIN"/wp-config.php
sed -i "s/password_here/$DB_PASSWORD/g" /srv/"$DOMAIN"/wp-config.php
Замена базы данных и имени пользователя работает нормально, но при замене пароля шесть из десяти раз замена не выполняется и Я получаю что-то вроде этого:
define ('DB_PASSWORD', 'Ymb {X-dT ~ l5Agg9q561A ^? npassword_hereD; $ U, s> mu *: f7 | BK4? OM # OH> cHgsI9GndW @ ~ SkBQ ');
Акцент на проблеме. Вместо того, чтобы удалить часть «password_here» и заменить ее фактическим паролем, он как бы объединяет строку в середине пароля.
Я думал, что это может быть символ, созданный из apg, который возился с sed, но я удалил довольно много из пароля, созданного с помощью -E, и все еще получаю это много.
То же самое происходит с другими заменами, всегда задействованы apg и sed. Замена таких вещей как _PASSWORD_HERE_ время от времени приводить к одной и той же проблеме.
Есть ли способ обойти это или мне нужно продолжать попытки найти символы, вызывающие проблемы, а затем добавить их в список исключений apg? Или, может быть, скажите sed заменить всю строку, а не только строку, которую я хочу?
Заранее спасибо!
Вам нужно избежать \
, /
и &
символы в вашем вводе, иначе sed действует на них. Что-то вроде
DB_PASSWORD=$(echo "$DB_PASSWORD" | sed -e 's/[\/&]/\\&/g')
sed -i "s/password_here/$DB_PASSWORD/g" /srv/"$DOMAIN"/wp-config.php
должен сделать свое дело.