You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash脚本将curl输出替换wp-config.php中的密钥盐代码段?

修复替换wp-config.php密钥段的Bash脚本错误

需求与问题

要写个Bash脚本,把wp-config.php里从/**#@+到/**#@-*/的密钥配置块,替换成WordPress官方接口返回的新密钥(通过curl https://api.wordpress.org/secret-key/1.1/salt/获取)。

自己写的脚本执行时报错:

sed: -e expression #1, char 20: extra characters after command

错在哪

  1. 直接把带换行、单引号的${SALT}变量塞sed命令里,sed解析不了这种复杂内容,直接报错
  2. sed命令的逻辑拼接有问题,变量引用没处理特殊字符
  3. 路径变量写错了,${WP-ROOT}应该是${WP_ROOT}

正确的sed脚本

#!/bin/bash

# 拉取最新密钥,-s参数关闭curl的进度输出
SALT=$(curl -s https://api.wordpress.org/secret-key/1.1/salt/)
WP_ROOT="/var/www/html/123123"
CONFIG_FILE="${WP_ROOT}/wp-config.php"

# 替换指定代码块,同时创建备份文件(.bak后缀)
sed -i.bak -e "/\/\*\*#@+/,/\/\*\*#@-\*\//c\\${SALT//$'\\'/\\\\}" "$CONFIG_FILE"

脚本细节

  • -i.bak:直接修改原文件,同时生成wp-config.php.bak备份;不需要备份的话,改成-i即可
  • /\/\*\*#@+/,/\/\*\*#@-\*\//:精准匹配要替换的代码块范围
  • ${SALT//$'\\'/\\\\}:把密钥内容里的反斜杠转义,避免sed解析出错
  • 用双引号包裹文件路径,防止路径带空格时出问题

更稳定的awk实现方案

如果sed还是搞不定特殊字符,用awk更稳妥:

#!/bin/bash

SALT=$(curl -s https://api.wordpress.org/secret-key/1.1/salt/)
WP_ROOT="/var/www/html/123123"
CONFIG_FILE="${WP_ROOT}/wp-config.php"

awk -v salt="$SALT" '
/\/\*\*#@+/ {
    print;
    print salt;
    skip=1;
    next
}
skip && /\/\*\*#@-\*\// {
    skip=0;
    next
}
!skip
' "$CONFIG_FILE" > temp-config.php && mv temp-config.php "$CONFIG_FILE"

awk逻辑说明

  • 碰到/**#@+时,先打印该行,再打印新密钥,然后开启跳过模式
  • 跳过模式下,直到碰到/**#@-*/才关闭跳过,中间的旧密钥内容都不打印
  • 关闭跳过模式后,正常输出文件其他内容
  • 最后把结果写到临时文件,替换原配置文件

内容的提问来源于stack exchange,提问作者Petar Tahchiev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 16:05:11