如何让awk在非Success开头的wp-cli输出前添加站点名称?
解决WP-CLI输出添加站点名的问题
问题分析
你当前的脚本仅在wp core update命令的awk处理中添加了站点名,后续命令的awk语句仅输出原行内容;同时WP-CLI的错误、警告信息默认输出到stderr,而awk默认只处理stdout,导致这部分内容也没加上站点名。
修复后的脚本
用函数封装站点处理逻辑,同时将stderr重定向到stdout,确保所有输出都能被awk处理:
process_site() { local site_path="$1" local site_name="$2" # 切换到站点目录,失败则终止当前站点的后续处理 cd "$site_path" || return # 统一处理各WP-CLI命令,给非Success:开头的行添加站点名前缀 wp core update 2>&1 | awk -v name="$site_name" '$1 != "Success:" {print name " " $0}' wp plugin update --all 2>&1 | awk -v name="$site_name" '$1 != "Success:" {print name " " $0}' wp theme update --all 2>&1 | awk -v name="$site_name" '$1 != "Success:" {print name " " $0}' wp core verify-checksums 2>&1 | awk -v name="$site_name" '$1 != "Success:" {print name " " $0}' wp cli cache clear 2>&1 | awk -v name="$site_name" '$1 != "Success:" {print name " " $0}' } # 处理第一个站点 process_site "~/public_html/archiegoodwin/" "Archie Goodwin" # 复制以下行,替换路径和站点名即可处理剩下7个站点 # process_site "~/public_html/your-site-2/" "Your Site 2" # process_site "~/public_html/your-site-3/" "Your Site 3" # ...
关键改进点
- 函数封装:避免重复编写相同命令,8个站点只需重复调用函数,维护更便捷
- stderr重定向:通过
2>&1将WP-CLI的错误、警告信息转到stdout,确保awk能捕获所有需要处理的输出 - awk变量传递:用
-v name="$site_name"将站点名传入awk,避免字符串硬编码的转义问题 - 目录切换容错:
cd "$site_path" || return确保目录不存在时,不会继续执行当前站点的后续命令
预期输出效果
修改后,非Success开头的输出会自动带上站点名:
Archie Goodwin Error: Strange wp-config.php file: wp-settings.php is not loaded directly. Archie Goodwin Error: Strange wp-config.php file: wp-settings.php is not loaded directly. Archie Goodwin Warning: File should not exist: wp-includes/widgets/error_log ...
内容的提问来源于stack exchange,提问作者spinhead
相关产品推荐
相关产品推荐

