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
データベースとユーザー名の置き換えは問題なく機能しますが、パスワードを置き換えると、10回のうち6回の置き換えがうまくいかず、私は次のようになります:
define( 'DB_PASSWORD'、 'Ymb {X-dT〜l5Agg9q561A ^?n password_here D; $ U、s> mu *:f7 | BK4?oM#OH> cHgsI9GndW @ 〜SkBQ');
この問題に重点を置きます。 「password_here」の部分を削除して実際のパスワードに置き換える代わりに、パスワードの途中で文字列を融合します。
Sedをいじっているapgから生成された文字である可能性があると思いましたが、-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
トリックを行う必要があります。