写入文件后关闭 cat 命令

写入文件后关闭 cat 命令

我目前正在尝试读取使用 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 %%

相关内容