尝试使用 sed 替换某些行时出现问题

问题描述 投票:0回答:1

我试图为一个大学项目创建一个在 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,但它并没有真正提出任何解决方案。

知道如何解决这个问题吗?谢谢!

wordpress bash ubuntu scripting ubuntu-server
1个回答
0
投票

我认为这可能是您想要做的,但没有示例输入和预期输出(脚本运行之前和之后“$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
来跳过证书验证才能使其通过脚本运行。

© www.soinside.com 2019 - 2024. All rights reserved.