我有一些bash用于"安装"服务器上的wordpress网站。
在其中,我通过SALTS=$(curl -L https://api.wordpress.org/secret-key/1.1/salt/);
我放了一个"令牌"在我的wp-config.php文件##WP_SALTS##
似乎我的sed
声明不正确,因为它一直让我犯错:
sed: -e expression #1, char 99: unknown option to `s'
我试过了:
sed -i "s+##WP_SALTS##+$SALTS+g" $WPCONFIG
同样:
sed -i "s/##WP_SALTS##/$SALTS/g" $WPCONFIG
仍然出现错误。我做错了什么?
来自curl
请求的响应每次都是随机的,但类似于:
define('AUTH_KEY', ':a>?5od_kaveFKaIB8px|!vgF-W/6/AQX04=&>Tu.-q3ehGOh59=SX+qc9sWk|gG'); define('SECURE_AUTH_KEY', ':tw+w! Sn2n~Rt0ReVA6#eWqsUXW5elHo@V~ oiRhTH4k]kg{<k`:An`]z==K@wZ'); define('LOGGED_IN_KEY', 'mD,JT*4pa3}zfGEpXFR}9jlzF,iD ;:]|>yu]T}&8Uy~(-5ml/AEBTG4|7QYCB|j'); define('NONCE_KEY', '@{Q`.7T a)S?0DTutE}D5Is(UlwnG4NuoQiFHas&i@qz%-HTd7-8[v50Nx<]akuT'); define('AUTH_SALT', 'es*7hCVnh/+c-cecgmZ?%QZ_KN^kaA[jD]N}{A8sK|~MH@Vl|(6-|{3EIGMhksy['); define('SECURE_AUTH_SALT', '}AF@:i!hy#C5,Q_5c4yhycm~i|fc53@+|h7r5H9y(/&4VBeX&sOrKC-6+AqeZ|L>'); define('LOGGED_IN_SALT', '4,}H+&[@qN#^!B+?3a+Mh0+?pURhP|v.CV/]4F-6G!TncU*Pd=GMSRPf?58j5Sv0'); define('NONCE_SALT', 'Dlo,7F[:EaWQT57-P0Q+x</nUf4UD&LH=-0wS6l._2Fx!-jR0KBJ-U_1*{sXo?>Q');
修改 现在实现一种随机生成64个字符盐的方法:
RSTR=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w ${1:-64} | head -n 1);
SALTS="define('AUTH_KEY', '$RSTR');
define('SECURE_AUTH_KEY', '$RSTR');
define('LOGGED_IN_KEY', '$RSTR');
define('NONCE_KEY', '$RSTR');
define('AUTH_SALT', '$RSTR');
define('SECURE_AUTH_SALT', '$RSTR');
define('LOGGED_IN_SALT', '$RSTR');
define('NONCE_SALT', '$RSTR');";
sed -i "s/##WP_SALTS##/$SALTS/g" $WPCONFIG
我用+,〜,/,&amp;,*替换了分隔符,但它们仍然会产生同样的错误。
答案 0 :(得分:2)
如果SALTS可能包含任何字符,则可以使用perl。
环境传递:
SALTS="$SALTS" perl -i.bak -pe 's/##WP_SALTS##/$ENV{SALTS}/g' "$WPCONFIG"
通过参数传递:
perl -i.bak -pe 'BEGIN{$salts=shift}s/##WP_SALTS##/$salts/g' "$SALTS" "$WPCONFIG"
答案 1 :(得分:1)
$SALTS
可能包含用作分隔符(+
或/
)的字符。如果您的文件不包含~
,您可以尝试:
sed -i "s~##WP_SALTS##~$SALTS~g" $WPCONFIG
但您可以使用任何可打印字符作为分隔符。
使用GNU sed,您还可以选择不可打印的(请参阅"sed rare-delimiter (other than & | / ?…)"。
答案 2 :(得分:0)
当你需要一个文字字符串时,不要使用sed,因为它只能理解带有反向引用的regexp和替换字符串,并且具有分隔符约束。只需使用带有字符串函数的工具,如awk:
SALTS="$SALTS" awk -i inplace '
BEGIN { old="##WP_SALTS##""; lgth=length(old); new=ENVIRON["SALTS"] }
s=index($0,old) { $0=substr($0,1,s-1) new substr($0,s+lgth) }
{ print }
' "$WPCONFIG"
以上使用GNU awk进行-i inplace
的内部编辑,就像你的GNU sed使用-i
一样。
不要将所有大写变量名称用于非导出变量btw - 按惯例,以避免与导出和内置变量发生冲突。