我目前正在尝试读取使用 USB 端口连接到计算机的设备。
这是我的代码:
stty -F /dev/ttyUSB0 9600 cs8 && cat -v < /dev/ttyUSB0 > /path/to/folder/file.txt
,直到看到输出为止,它都运行良好。唯一不够完美的是,在将输出写入文件后,命令仍在监听端口(不会自动关闭),所以我必须手动按 Ctrl+C。
那么,我应该怎么做才能自动关闭命令(比如自动按 Ctrl+C)?
非常感谢。
答案1
问题在于知道何时停止复制ttyUSB0
。
如果数据的结尾用可识别的字符或字节标记(例如,是),保证不会在传入流的其他地方发生,那么以下内容可以优雅地解决您的问题:
stty -F /dev/ttyUSB0 eof Z 9600 cs8 && cat -v < /dev/ttyUSB0 > /path/to/file.txt
如果没有这样的单个字符,但是出现了某个序列(比如,结尾)可用于检测是否已读取足够的数据,然后执行以下操作:
stty -F /dev/ttyUSB0 9600 cs8 && sed '/END/q' < /dev/ttyUSB0 > /path/to/file.txt
可以工作,条件是传入的数据是面向行的。也就是说,“END”后面必须至少有一个换行符,否则sed
将看不到它。(这正是为什么始终以换行符结束文本文件是一种良好做法的原因。)
当然,总会有粗暴的方法。假设你知道这项工作绝不会花费超过一分钟的时间:
stty -F /dev/ttyUSB0 9600 cs8 && cat -v < /dev/ttyUSB0 > /path/to/file.txt &
sleep 60 && kill %%