名称: telegram-ascii-table
描述: 将表格数据格式化为适用于 Telegram 的 ASCII 框线表格。仅通过标准输入接收数据,可消除 Shell 注入风险。支持智能列宽调整、文本换行和等宽显示的适当填充。
将表格数据格式化为 ASCII 框线表格,确保在 Telegram 代码块中正确渲染。
{baseDir}/scripts/ascii-table.py <<'EOF'
Name|Value|Status
Server|web-01|Online
Database|db-01|Syncing
EOF
发送到 Telegram 时,请将输出包裹在三个反引号中。
# 桌面模式(默认):使用 Unicode 框线字符,宽度为 58 个字符
ascii-table <<'EOF'
Server|Status|Uptime
web-01|Online|14d 3h
db-01|Syncing|2d 12h
EOF
# 移动模式:使用 ASCII 字符,宽度为 48 个字符
ascii-table --mobile <<'EOF'
Task|Status
Deploy|Done
Test|Pending
EOF
# 自定义宽度
ascii-table --width 80 <<'EOF'
Column|Another Column
data|more data
EOF
cat data.txt | ascii-table
echo -e 'Name|Value\nRow1|Data1' | ascii-table
some-command | ascii-table --mobile
┌───────────┬───────┬────────────────────────────────────────────┐
│ 标志 │ 简写 │ 描述 │
├───────────┼───────┼────────────────────────────────────────────┤
│ --desktop │ -d │ Unicode 框线字符,58 字符宽(默认) │
├───────────┼───────┼────────────────────────────────────────────┤
│ --mobile │ -m │ ASCII 字符,48 字符宽 │
├───────────┼───────┼────────────────────────────────────────────┤
│ --width N │ -w N │ 覆盖默认宽度 │
└───────────┴───────┴────────────────────────────────────────────┘
┌───────────────┬──────────────────────┬─────────────────────┐
│ 方面 │ 桌面模式(默认) │ 移动模式 │
├───────────────┼──────────────────────┼─────────────────────┤
│ 字符 │ 框线绘制字符 │ ASCII 字符(+ -) │
├───────────────┼──────────────────────┼─────────────────────┤
│ 默认宽度 │ 58 个字符 │ 48 个字符 │
├───────────────┼──────────────────────┼─────────────────────┤
│ 渲染效果 │ 在桌面端清晰 │ 在所有设备上可靠 │
├───────────────┼──────────────────────┼─────────────────────┤
│ 适用场景 │ 接收方使用桌面端 │ 接收方使用移动端 │
└───────────────┴──────────────────────┴─────────────────────┘
Unicode 框线字符在移动版 Telegram 上的渲染宽度不一致。若接收方使用移动设备,请使用 --mobile 选项。
| 分隔┌──────────┬──────────┬──────────┐
│ Server │ Status │ Uptime │
├──────────┼──────────┼──────────┤
│ web-01 │ Online │ 14d 3h │
├──────────┼──────────┼──────────┤
│ db-01 │ Syncing │ 2d 12h │
└──────────┴──────────┴──────────┘
+------------+----------+----------+
| Server | Status | Uptime |
+------------+----------+----------+
| web-01 | Online | 14d 3h |
+------------+----------+----------+
| db-01 | Syncing | 2d 12h |
+------------+----------+----------+
┌─────────┬────────┬──────────────────────────────────────┐
│ Task │ Status │ Notes │
├─────────┼────────┼──────────────────────────────────────┤
│ Deploy │ Done │ Rolled out to prod successfully │
│ API │ │ │
├─────────┼────────┼──────────────────────────────────────┤
│ Fix bug │ WIP │ Waiting on upstream OAuth fix │
└─────────┴────────┴──────────────────────────────────────┘
本脚本有意不将行数据作为命令行参数接收。
Shell 的参数解析发生在任何脚本运行之前。在双引号参数中的字符如 `、$ 和 ! 会被 Shell 执行或展开——而不是由接收它们的脚本处理。例如,`whoami` 会在脚本看到它之前就执行并替换为其输出。
通过要求标准输入,用户数据完全绕过了 Shell 解析。带引号的 heredoc (<<'EOF') 会原样传递所有内容——无需转义,也不可能执行。
| 分隔列(单元格内容中不能出现此字符)