0

基本的なWordpressのインストールを高速化するためのスクリプトを書いています。最新バージョンをダウンロードして解凍し、クライアント名を変更してから、構成ファイルのテキストを更新します。

ただし、sedを使用して特殊文字を含む複数行を挿入するのに問題があります。複数の行はWPシークレットキージェネレーターhttps://api.wordpress.org/secret-key/1.1/salt/からのものであり、標準を置き換えるものです

define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',    'put your unique phrase here');

等...

これが私に問題を与えているコードのビットです

# Download data to variable
salt="`curl https://api.wordpress.org/secret-key/1.1/salt/`"

sed -i "/NONCE_SALT/a $salt" $pname/wp-config-sample.php

生成されたテキストを変数にダウンロードしてから、標準テキストの最後のインスタンスの後に新しい行に挿入しようとしています(後でこれらの標準行をすべて削除します)。次のエラーが発生します。

"ed: -e expression #1, char 112: extra characters after command" 

標準テキストを1行入力すると、問題ありません。周囲に引用符を追加すると、ファイル内$saltのリテラルが出力$saltされます。

sedはこのデータを挿入するための正しいアプローチですか?ファイル内の特定のポイントの後に挿入する必要があることに注意してください。

ヒントやヒントは大歓迎です。これは、bashスクリプトでの私の最初の試みです。

4

3 に答える 3

4

このa関数では、文字列の内部改行の前に円記号を付ける必要があります。したがって、1つのアプローチはsed、必要な円記号を追加するために使用することです。

# Download data to variable, adding \ to all but the last line:
salt="$(curl https://api.wordpress.org/secret-key/1.1/salt/ | sed '$ ! s/$/\\/')"

sed -i "/NONCE_SALT/a $salt" "$pname/wp-config-sample.php"

$(...)(私が代わりに使用したことに注意してください`...`:後者には苦痛な引用規則があります。この場合、私は\\\\代わりに書く必要がありました\\。)

rとは言うものの、この場合、salt-stuffを一時ファイルに保存し、次の代わりに使用する方が簡単かもしれないと思いますa

# Download data to the file salt.txt:
curl https://api.wordpress.org/secret-key/1.1/salt/ > salt.txt

sed -i "/NONCE_SALT/r salt.txt" "$pname/wp-config-sample.php"

rm salt.txt      # could also be done in a trap
于 2012-10-26T01:12:10.177 に答える
2

これを試して:

awk -v salt="$(curl https://api.wordpress.org/secret-key/1.1/salt/)" '
    {print} /NONCE_SALT/{print salt}
' "$pname/wp-config-sample.php" > tmp$$ && mv tmp$$ "$pname/wp-config-sample.php"

sedとは異なり、awkは、sedが失敗する原因となる可能性のある他の文字のバックスラッシュ、引用符、または改行の影響を受けません。

于 2012-10-26T04:05:11.717 に答える
1

wp-config.phpの内容をfileに置き換えたり、$saltwp wp-config-sample.php-config-sample.phpをその場で編集してファイルを作成する代わりに、egrep -vから行を削除wp-config-sample.phpし、最後に必要な新しい行を連結する方が簡単です。つまり、次の3つの手順を実行するスクリプトを作成し、次の代わりに適切なコードを使用しますwrite-customer-stuff

egrep -v 'name_here|word_here|unique phrase here' wp-config-sample.php > wp-config.php
write-customer-stuff >> wp-config.php  
curl https://api.wordpress.org/secret-key/1.1/salt/ >> wp-config.php

初歩的なエラーチェックのために、次のような行を追加することもできます。

[ $(wc -l < wp-config.php) -eq $(wc -l < wp-config-sample.php) ] || echo '*** Lengths of wp-config.php and wp-config-sample.php are different ***'
于 2012-10-26T04:46:45.353 に答える