我正在尝试编写一个能够解释来自串行设备的数据的 bash 脚本。我以原始方式配置端口,然后我可以对 /dev/ttyUSB0 进行简单的 cat 操作并查看数据。我的问题是如何获取设备在 bash 变量中发送的单行数据,以便我可以自由地操作它。
我想在使用 Python 之前先在 bash 中使用它,这样我总是有一个我知道它可以在每台 Linux 机器上运行的脚本。
我收到的数据具有以下格式:STX<26 x 4Bit-Nibbles coded as ASCII Payload>ETX
理想情况下,每次获得新的数据字符串时,我都可以将新的有效负载(因此没有 STX 和 ETX)存储在 Bash 变量中。
解决方案
在@icarus回答的帮助下,我制作了一些像魅力一样的东西。首先,我配置串口以生成具有 STX 值的中断:
stty /dev/ttyUSB0 115200 intr 0x02
然后为了获取我想要的信息,我使用这个循环:
ETX=$'\003'
同时读取 -d "$ETX" 行;回显 $line;完成 < /dev/ttyUSB0
再次感谢您的帮助,在这个网站的第一次体验真的很棒。干杯
答案1
未经测试!
#!/bin/bash
ETX=$'\003'
STX=$'\002'
# Open /dev/ttyUSB0 open on FD9
exec 9< /dev/ttyUSB0
# do any stty stuff needed on fd9
# e.g.
# stty 9600 < /proc/self/fd/9 > /proc/self/fd/9
# now loop, reading from the device,
while IFS= read -rd "$ERX" -u 9 wibble
do
wibble=${wibble#"$STX"}
printf 'Got %q\n' "$wibble"
# Do something
done
对于bash
,如果数据包含 NUL 字节,则该方法将不起作用。zsh
如果是这种情况,您需要使用它。