配置Lando工具时wp-cli的--extra-php选项出现语法错误求助
解决Lando配置wp-cli --extra-php时的Shell语法错误
问题分析
你遇到的/bin/sh: 1: Syntax error: "(" unexpected错误,根源是YAML对多行Shell命令的解析方式有误。原配置里的heredoc(从<<'PHP'到PHP的代码段)被YAML拆成了独立行,Shell执行时会把define(当成新命令,从而触发语法报错。
解决方案
使用YAML的**块标量(|)**包裹包含heredoc的完整命令,确保整个Shell命令作为一个整体执行。修改后的配置如下:
tooling: npm: service: node wp-install: service: appserver cmd: - | wp config create --dbname=wordpress --dbuser=wordpress --dbpass=wordpress --dbhost=database --extra-php <<'PHP' define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true ); define( 'ACF_PRO_LICENSE', 'XXX'); PHP - wp core install --url=http://$LANDO_APP.$LANDO_DOMAIN --title=XXX --admin_user=StudioAl --admin_password=XXX --admin_email=kerri@studioal.com - wp plugin install gravityformscli --activate - wp gf install --XXX --activate - wp plugin install "http://connect.advancedcustomfields.com/index.php?p=pro&a=download&k=XXX" --activate
替代方案(单行写法)
如果觉得多行块标量繁琐,也可以把PHP代码合并成单行,直接作为--extra-php的参数:
tooling: npm: service: node wp-install: service: appserver cmd: - wp config create --dbname=wordpress --dbuser=wordpress --dbpass=wordpress --dbhost=database --extra-php "define('WP_DEBUG', true); define('WP_DEBUG_LOG', true); define('ACF_PRO_LICENSE', 'XXX');" - wp core install --url=http://$LANDO_APP.$LANDO_DOMAIN --title=XXX --admin_user=StudioAl --admin_password=XXX --admin_email=kerri@studioal.com - wp plugin install gravityformscli --activate - wp gf install --XXX --activate - wp plugin install "http://connect.advancedcustomfields.com/index.php?p=pro&a=download&k=XXX" --activate
原理说明
- YAML的
|块标量会保留文本的换行和缩进,确保包含heredoc的Shell命令被完整传递给Shell执行,不会被拆分成多个独立命令。 - 原写法中,YAML把
heredoc的每一行都当成数组元素的一部分,Shell执行时会依次执行wp config create ...、define(...)等操作,而define并非Shell命令,因此触发语法错误。
内容的提问来源于stack exchange,提问作者StudioAl
相关产品推荐
相关产品推荐

