我试图为一个大学项目创建一个在 Ubuntu Server 中自动安装 Wordpress 的脚本。当我尝试将身份验证密钥插入 wp-config.php 文件中时,问题就出现了。密钥是通过生成密钥的 url 获取的,并且可以使用curl 获取。命令的输出:
curl -s https://api.wordpress.org/secret-key/1.1/salt/
是这样的:
define('AUTH_KEY', '$+ef);AyI`T!+<2gPHrG%R^&6NX`E~+TumT qdMWY&QP.l) TYz2fENG}[bCc8~:');
define('SECURE_AUTH_KEY', 'omDNxow|,(WIuk-pS MRG&P&2Shlk8Y=Q<PH|+fA;T`~b:?I- <Q|ng}~TX|@=^s');
define('LOGGED_IN_KEY', '3d[bU]VTc+R84#+~TYAO#?c+FQLWVxDq&1wGUZC;$d@n1)9We VXrGIJN3cX*d%E');
define('NONCE_KEY', 'S(No,u/>6(Q4!2(u6ri-LRAp8uESFY{__ZWbH(nP]YOC3WA@JvWkkwrIY<^Dvm b');
define('AUTH_SALT', 'ph512NCyJ?3]g|a|<5@fH5cCX&Rw{%+}Sm?gmVQ6WRnj-]N2]rg+i{21<-05`H>o');
define('SECURE_AUTH_SALT', 'hig|pYFPmF6w1Jm&R:U{ZDvxkeOW*#63ys!b7]FT|v*Crm>8kK!;hw=`hovm)Rqp');
define('LOGGED_IN_SALT', 'S[40r?y~.*-]Z9]0qLEOTp}}+T|lO|p-Qz|^h}:C{s&_X]kOkPp+uKuOhy3j`sf9');
define('NONCE_SALT', 'Ph|CZMq3C]<p2*G=qV2PSj5o4mYjTg!NX`[G---_W%w2H:`e6Q@1!a:]vYWxQlP#');
默认值如下所示:
define( 'AUTH_KEY', 'put your unique phrase here' );
我想将按键插入到采样行所在的同一行中。如果我只是将curl 的输出附加到文档中,它将无法工作。问题是键是由许多冲突的字符组成的,当我尝试使用 sed 替换行时,这会导致错误。 由于字符冲突,我用来替换这些行的 bash 脚本不起作用。这是脚本:
key_names=("AUTH_KEY SECURE_AUTH_KEY LOGGED_IN_KEY NONCE_KEY AUTH_SALT SECURE_AUTH_SALT LOGGED_IN_SALT NONCE_SALT")
key_values=($(curl -s https://api.wordpress.org/secret-key/1.1/salt/ | awk -F"'" '{for(i=2;i<=NF;i+=2) print $i}' | awk 'length >30'))
# iterate over each element to insert the keys in wp-config.php proper line
for ((i=0; i<${#key_values[@]}; i++)); do
sed -i "s/define( '${key_names[i]}', '.*' );/define( '${key_names[i]}', '${key_values[i]}' );/" $WP_CONF_FILE
done
我尝试将curl命令的输出重定向到文件,但它不起作用,需要将这些行插入到示例行所在的位置。我还尝试用 sed 替换这些行(使用上面的脚本),但由于字符冲突而不起作用。我也尝试询问 ChatGPT,但它并没有真正提出任何解决方案。
知道如何解决这个问题吗?谢谢!
我认为这可能是您想要做的,但没有示例输入和预期输出(脚本运行之前和之后“$WP_CONF_FILE”的内容),这是一个未经测试的猜测。使用任何 awk:
$ cat tst.sh
#!/usr/bin/env bash
tmp=$(mktemp) || exit 1
trap 'rm -f "$tmp"; exit' EXIT
curl -k -s 'https://api.wordpress.org/secret-key/1.1/salt/' |
awk -F"'" '
NR == FNR {
map[$2] = $4
next
}
($1 == "define(") && ($2 in map) {
$0 = $1 FS $2 FS ", " map[$2] FS ");"
}
{ print }
' - "$WP_CONF_FILE" > "$tmp" &&
mv -- "$tmp" "$WP_CONF_FILE"
当我从命令行运行您的
curl
命令时,我得到了与您显示的相同类型的输出,但是当我从脚本运行它时,我没有得到任何输出,因此当我删除 -s
选项以查看它是否正在报告时我遇到的任何失败curl: (35) schannel: next InitializeSecurityContext failed: Unknown error (0x80092012) - The revocation function was unable to check revocation for the certificate.
。我必须添加 -k
来跳过证书验证才能使其通过脚本运行。