1 votos

¿Cómo evitar que se rompa el sed cuando se combina con apg?

Estoy escribiendo un guión que va a instalar WordPress de forma automática para mí, para hacer mi vida más fácil ya que tengo que implementar WordPress instala constantemente.

Sin embargo, estoy tratando de hacer de él, así que nunca tendrá que interactuar con él, y que está teniendo mi sueño de distancia.

Para generar las contraseñas de bases de datos y todo eso, yo uso la apg, y, a continuación, utilizar la sed para reemplazar una cadena de texto con la contraseña correcta. Se ve algo como esto:

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

Colocación de la base de datos de nombre de usuario y funciona bien, pero cuando la sustitución de la contraseña, seis de cada diez veces la de reemplazar va mal y termino con algo como esto:

define('DB_PASSWORD', 'Ymb{X-dT~l5Agg9q561A^?npassword_hereD;$U,s>mu*:f7|BK4?oM#OH>cHgsI9GndW@~SkBQ');

Énfasis en la cuestión. En lugar de la eliminación de la "password_here" parte y reemplazarla con la contraseña real, que es la de los fusibles de la cadena en el medio de la contraseña.

Pensé que podría ser un personaje generado a partir de la apg, que estaba jugando con sed, pero he quitado bastantes de la contraseña generada mediante -E y aún así obtener mucho de esto.

Mismo sucede con otros sustituye, siempre envueltos apg y sed. La sustitución de las cosas tales como _PASSWORD_HERE_ resultado en el mismo problema de tiempo en tiempo.

¿Hay alguna forma de evitar esto o tengo que seguir tratando de encontrar caracteres que causen problemas y, a continuación, agregarlos a la apg de la lista de exclusión? O tal vez decirle a sed para reemplazar toda la línea en lugar de sólo la cadena que quiero?

Gracias de antemano!

3voto

katit Puntos 130

Debe escapar de los caracteres \ , / y & en su entrada, de lo contrario sed actúa sobre ellos. Algo como

 DB_PASSWORD=$(echo "$DB_PASSWORD" | sed -e 's/[\/&]/\\&/g')
sed -i "s/password_here/$DB_PASSWORD/g" /srv/"$DOMAIN"/wp-config.php
 

debe hacer el truco

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: