You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将热敏打印机ESC/POS状态命令结果存入BASH变量?

问题描述

我在为运行精简版Ubuntu的瘦客户端编写脚本,用来检测RS232(ttyS0)连接的打印机是否正常。目前能向打印机打印内容,但无法读取打印机设置。

现有BASH脚本如下:

#!/bin/bash
# Gather information
ip4=$(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1)
locdate=$(date)
drstatus="To be implemented yet"
#[Set serial port speed]
stty -F /dev/ttyS0 38400;
#listen to the port report
# cat /dev/ttyS0&
#[Send print test to the printer]
#initialize printer
echo -e '\x1b\x40'>/dev/ttyS0
# send printer data
echo -e '\x1b\x45 TM88 Hardware Test:\x1b\x46\xa'>/dev/ttyS0
echo -e $locdate'' >/dev/ttyS0
echo -e 'Hostname: '$HOSTNAME'' >/dev/ttyS0
echo -e 'Endpoint IP address: '$ip4''>/dev/ttyS0
echo -e '\x1d\x6b\x04000\x00'>/dev/ttyS0
echo -e 'Printer connected to COM1 / ttyS0'>/dev/ttyS0
echo -e 'Comm. speed 38400 bps'>/dev/ttyS0
echo -e 'Cash drawer status:'$drstatus'\xa'>/dev/ttyS0
echo -e '\xa\xa\xa\xa\xa\xa\x1bm'>/dev/ttyS0

发送读取设置的ESC/POS命令为:

echo -e '\x1d\x49\x01'>/dev/ttyS0

之后用cat < /dev/ttyS0查看响应,但没有任何输出。想知道如何将ESC/POS命令的响应存入BASH变量?


解决方案

1. 完善串口参数配置

串口通信仅设置波特率不够,必须匹配打印机的数据位、停止位、奇偶校验(常见为8N1:8数据位、无校验、1停止位,可参考打印机手册调整)。执行完整配置:

stty -F /dev/ttyS0 38400 cs8 -cstopb -parenb -icanon -echo

参数说明:

  • cs8:设置8位数据位
  • -cstopb:使用1位停止位
  • -parenb:关闭奇偶校验
  • -icanon:关闭规范模式,避免系统缓冲干扰响应读取
  • -echo:关闭回显,防止发送的命令被回读干扰结果

2. 读取响应并存入变量

直接用cat会无限阻塞等待输入,需结合超时或固定长度读取:

方法1:超时读取(推荐)

# 发送查询命令
echo -e '\x1d\x49\x01' > /dev/ttyS0
# 等待1秒读取响应,存入变量
printer_response=$(timeout 1 cat /dev/ttyS0)
# 打印变量内容(响应含非ASCII字符,需用双引号包裹)
echo "$printer_response"

timeout 1限制最多等待1秒,避免脚本长时间阻塞。

方法2:固定字节数读取

若已知响应的固定长度(比如手册说明为16字节),可直接指定:

echo -e '\x1d\x49\x01' > /dev/ttyS0
# 读取16字节响应,忽略dd的错误输出
printer_response=$(dd if=/dev/ttyS0 bs=1 count=16 2>/dev/null)

3. 排查要点

  • 确认打印机支持该查询命令,且处于就绪状态(比如执行初始化命令\x1b\x40后)
  • 检查串口线缆是否为双向通信线(部分廉价打印线仅含发送线,无接收线)
  • 用minicom或screen手动测试:执行screen /dev/ttyS0 38400连接串口,发送命令验证是否有响应,排除脚本逻辑问题

内容的提问来源于stack exchange,提问作者Eki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 21:51:15