wp-cli表格输出存入bash变量后格式丢失,如何保留格式发Slack webhook
问题原因
你遇到的格式丢失并非Bash主动剔除了表格的+、-、|字符,核心是两个常见的Shell/命令行工具特性导致的:
- 未用双引号包裹变量触发了Shell分词与空白折叠:当你直接写
echo $updatesplugins时,Shell会将变量内的所有换行、连续空格、制表符统一识别为单词分隔符,把整段内容拆分为独立单词后用单个空格拼接再传给echo,原本的排版结构会被完全打散。 - 部分命令行工具的TTY检测逻辑:wp-cli这类工具会自动判断标准输出是否为交互式终端,如果检测到输出是被赋值给变量、传入管道这类非终端场景,部分版本会默认输出无格式的纯文本,即便你指定了
--format=table也可能失效。
解决方法
1. 保留原始表格格式
首先修正变量引用写法,所有用到$updatesplugins的地方都用双引号包裹,强制Shell保留原始的换行和空格:
#!/bin/bash updatesplugins=$(wp plugin update --all --dry-run --format=table) echo "$updatesplugins"
如果执行后还是没有表格边框,可以在wp-cli命令后加--color=always强制输出完整格式化内容:
updatesplugins=$(wp plugin update --all --dry-run --format=table --color=always)
2. 发送到Slack Webhook
Slack的消息支持Markdown代码块渲染,你可以把表格内容包裹在三个反引号中,这样Slack会自动用等宽字体展示,完全保留表格排版,完整示例脚本如下:
#!/bin/bash # 拉取更新表格 updatesplugins=$(wp plugin update --all --dry-run --format=table --color=always) # 构造Slack请求payload payload=$(cat <<EOF { "text": "WordPress插件可更新列表:\n\`\`\`\n$updatesplugins\n\`\`\`" } EOF ) # 发送请求到Slack,替换为你自己的Webhook地址即可 curl -X POST \ -H "Content-Type: application/json" \ --data "$payload" \ 你的Slack Webhook地址
内容的提问来源于stack exchange,提问作者Jurgen Oldenburg
相关产品推荐
相关产品推荐

