我想写一个bash脚本来替换我的wp-config.phg
文件中的以下PHP代码段:
/**#@+
* Authentication unique keys and salts.
*
* Change these to different unique phrases! You can generate these using
* the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}.
*
* You can change these at any point in time to invalidate all existing cookies.
* This will force all users to have to log in again.
*
* @since 2.6.0
*/
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' );
define( 'NONCE_KEY', 'put your unique phrase here' );
define( 'AUTH_SALT', 'put your unique phrase here' );
define( 'SECURE_AUTH_SALT', 'put your unique phrase here' );
define( 'LOGGED_IN_SALT', 'put your unique phrase here' );
define( 'NONCE_SALT', 'put your unique phrase here' );
/**#@-*/
这是我的尝试:
SALT=$(curl https://api.wordpress.org/secret-key/1.1/salt/)\
WP_ROOT=/var/www/html/123123
SALT_START='\/\\*\\*#@+';
SALT_END='\/\\*\\*#@-\\*\/';
sed -ne "/${SALT_START}/ {p; ${SALT}" -e ':a; n; /${SALT_END}/ {p; b}; ba}; p' ${WP-ROOT}/wp-config.php
但我得到了以下结果:
sed: -e expression #1, char 20: extra characters after command
我试着从这里复制和修改:
Replace delimited block of text in file with the contents of another file
但没有成功。
1条答案
按热度按时间wvmv3b1j1#
您的代码是:
如果我们将
sed
和curl
更改为echo ''
,然后运行,我们会看到:这显然不是预期的命令。
有许多问题。
\
表示未定义WP_ROOT
(该行成为SALT=
赋值的一部分${WP-ROOT}
是一个输入错误,如果变量WP
未设置,则返回“ROOT”SALT_START
(和SALT_END
)中有太多的反斜杠${SALT}
未扩展为有效的sed命令更简单的代码是:
代码写入stdout。通过适当的错误检查,您可以将
-i
选项添加到sed中以就地更改文件虽然我上面的代码回答了上述问题,但更有可能的是,人们希望能够重复该命令来加载新的机密。然而,上面的代码删除了标记线,所以这不会起作用。
看看wordpress url的salt输出,我们看到只生成了定义行,所以只有那些行应该在配置文件中被替换。
如果OS/sed支持以
/dev/stdin
的形式访问标准输入,那么在没有临时文件(或错误检查!)的情况下,),可以:这依赖于一个技巧:
/dev/stdin
被包含在每一个define行中,但是数据已经被第一个包含所消耗,所以多个副本不会出现在输出中。(如果使用“真实的”文件名,这将不是真的,因为sed每次都会简单地重新打开并查找到开头)。