web-dev-qa-db-ja.com

apgと組み合わせたときにsedが壊れるのを防ぐ方法は?

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に指示しますか?

前もって感謝します!

2
James Pond

入力内の\/、および&文字をエスケープする必要があります。そうしないと、sedがそれらに作用します。何かのようなもの

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

トリックを行う必要があります。

4
user9517